Tenho duas contas no GitHub, uma pessoal e uma do trabalho. Por muito tempo resolvi isso configurando user.email manualmente em cada repositório, esquecendo de fazer isso, e acabando com commits com a identidade errada. Não é o ideal.

A solução é o includeIf no git config. Ele permite carregar um arquivo de configuração separado com base em onde o repositório está no disco.

Meus repositórios ficam em ~/ghq/github.com/, e os do trabalho em ~/ghq/github.com/GRITSpot/. Essa organização é o que faz tudo funcionar direitinho.

O config principal

~/.config/git/config tem os dados pessoais como padrão:

[user]
    name = cacarico
    email = caio.quinilato@gmail.com
    signingkey = FCFDEA8966F8FA8B0296B9E80B5D2872304AD213

[commit]
    gpgsign = true

[tag]
    gpgSign = true

[includeIf "gitdir:~/ghq/github.com/work-org/"]
    path = ~/.config/git/config-work

[alias]
    pf = push --force-with-lease

[pull]
    rebase = false

O bloco includeIf diz: se o repositório atual estiver dentro de ~/ghq/github.com/my-org/, carrega o config-work por cima deste config. Qualquer coisa nesse arquivo sobrescreve os valores acima.

O config do trabalho

~/.config/git/config-beat apenas sobrescreve a identidade:

[user]
    name = cacarico
    email = caio.quinilato@workemail.com
    signingkey = 52D0703DEE77DC600000000AD3D5CEEEABFCEF2E

[commit]
    gpgsign = true

[tag]
    gpgSign = true

É só isso. Dentro de um repositório do trabalho, o git usa o email e a chave GPG do trabalho. Fora dele, cai de volta para o pessoal. Sem configuração manual por repositório, sem esquecer nada.