J’ai deux vies Git : une pro (Gitlab d’entreprise, email pro, clé SSH pro) et une perso (GitHub perso, email perso, clé SSH perso). Avant d’utiliser ce qui suit, il m’est arrivé de devoir réécrire l’historique git parce que j’avais commit avec la mauvaise identité.

includeIf règle ça. On définit une config différente selon le chemin du repo.

# ~/.gitconfig
[includeIf "gitdir:~/dev/michelin/"]
    path = ~/.gitconfig-michelin

[includeIf "gitdir:~/dev/perso/"]
    path = ~/.gitconfig-perso

Et chaque fichier ne contient que les différences :

# ~/.gitconfig-michelin
[user]
    name = Florent Bissirieix
    email = florent.bissirieix@michelin.com
[core]
    sshCommand = "ssh -i ~/.ssh/id_ed25519_michelin"
# ~/.gitconfig-perso
[user]
    name = flobsx
    email = flobsx@gmail.com
    signingkey = 6E4F7A9B
[commit]
    gpgsign = true

Le piège : gitdir: matche le début du chemin. ~/dev/perso/ ne matchera PAS ~/Documents/dev/perso/. Le / final est important. Et gitdir/i (insensible à la casse) existe aussi si on travaille sur macOS.