Recommended Ansible Git configuration

The following file contains ansible tasks for a given user (identified by username) to set up the recommended Git configuration. It includes setting the user’s name and email, configuring the editor, setting up credential management, defining aliases, and configuring color settings.

- name: Set git user name
  git_config:
    name: user.name
    value: "{{ fullname }}"
    scope: global
  become: true
  become_user: "{{ username }}"

- name: Set git user email
  git_config:
    name: user.email
    value: "{{ email }}"
    scope: global
  become: true
  become_user: "{{ username }}"

- name: Set git editor to code
  git_config:
    name: core.editor
    value: "code"
    scope: global
  become: true
  become_user: "{{ username }}"

- name: Run git-credential-manager configure
  command: git-credential-manager configure
  become: true
  become_user: "{{ username }}"

- name: Configure git credential store
  git_config:
    name: credential.credentialStore
    value: "plaintext"
    scope: global
  become: true
  become_user: "{{ username }}"

- name: Configure git aliases
  git_config:
    name: "alias.{{ item.name }}"
    value: "{{ item.value }}"
    scope: global
  become: true
  become_user: "{{ username }}"
  loop:
    - { name: "st", value: "status" }
    - { name: "ci", value: "commit" }
    - { name: "br", value: "branch" }
    - { name: "co", value: "checkout" }
    - { name: "df", value: "diff" }
    - { name: "lg", value: "log -p" }
    - { name: "lol", value: "log --graph --decorate --pretty=oneline --abbrev-commit" }
    - { name: "lola", value: "log --graph --decorate --pretty=oneline --abbrev-commit --all" }
    - { name: "mr", value: "!sh -c 'git switch master ; git branch -D mr-$1-$2 ; git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' -" }
    - { name: "pu", value: "!sh -c 'git switch master ; git pull upstream master'" }
    - { name: "r", value: "!r() { git rebase -i HEAD~$1; }; r" }
    - { name: "rium", value: "rebase -i upstream/master" }
    - { name: "rum", value: "rebase upstream/master" }
    - { name: "rhum", value: "reset --hard upstream/master" }
    - { name: "pusu", value: "!git push --set-upstream origin $(git symbolic-ref --short HEAD)" }
    - { name: "sc", value: "!git switch -c" }

- name: Configure git color settings
  git_config:
    name: "color.{{ item }}"
    value: "auto"
    scope: global
  become: true
  become_user: "{{ username }}"
  loop:
    - diff
    - status
    - branch

- name: Configure git push settings
  git_config:
    name: "{{ item.name }}"
    value: "{{ item.value }}"
    scope: global
  become: true
  become_user: "{{ username }}"
  loop:
    - { name: "push.default", value: "tracking" }
    - { name: "push.autoSetupRemote", value: "true" }

- name: Configure git diff settings
  git_config:
    name: "{{ item.name }}"
    value: "{{ item.value }}"
    scope: global
  become: true
  become_user: "{{ username }}"
  loop:
    - { name: "diff.renamelimit", value: "0" }
    - { name: "diff.algorithm", value: "patience" }