Tendo contas separadas (pessoal, trabalho, demo) na mesma máquina, dá para trocar identidade Git e chave SSH automaticamente conforme o diretório do repositório.

1. Organize por diretório. Uma pasta por conta:

~/github
├── /demo
├── /personal
└── /work

2. ~/.gitconfig global com a conta padrão e includeIf para sobrescrever nas outras pastas:

[user]
  name = <nome_pessoal>
  email = <email_pessoal>
  signingkey = <chave_ssh>
[gpg]
  format = ssh
[gpg "ssh"]
  program = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign"
[commit]
  gpgsign = true
[includeIf "gitdir:~/github/work"]
  path = ~/github/work/.gitconfig

3. Um .gitconfig por pasta (ex: ~/github/work/.gitconfig) com o [user] daquela conta. Ele só é carregado dentro daquele diretório.

4. ~/.ssh/config define o 1Password como agente SSH padrão e um host por conta apontando para github.com:

# 1Password como agente SSH para todos os hosts
Host *
    IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

Host gh-work
    HostName github.com
    User git
    IdentityFile ~/.ssh/work_git.pub
    IdentitiesOnly yes

5. Aponte o remote de cada repo para o host certo:

git remote set-url origin gh-work:<org>/<repo>.git
git remote -v   # confere
git fetch       # confirma a chave SSH oferecida

Com as chaves no 1Password

Quando as chaves vivem no 1Password — possivelmente em contas diferentes (pessoal, trabalho, demo) — duas peças da config acima fazem todo o trabalho, e a chave privada nunca toca o disco:

  • Autenticação SSH: a linha IdentityAgent em Host * aponta o cliente SSH para o socket do agente do 1Password. Na hora de autenticar (git fetch, git push), o 1Password é quem responde, oferecendo a chave privada certa e pedindo aprovação por Touch ID. O IdentityFile no ~/.ssh/config aponta para a chave pública (.pub), que serve só para o agente saber qual chave daquela conta usar.
  • Assinatura de commits: com gpg.format = ssh e gpg.ssh.program = op-ssh-sign, o Git delega a assinatura ao binário do 1Password em vez do GPG. Como commit.gpgsign = true, todo commit é assinado; o user.signingkey de cada .gitconfig define qual chave SSH assina naquele diretório. Resultado: a conta correta autentica e assina, sem trocar nada manualmente ao mudar de pasta.

Fonte: Working with multiple GitHub accounts and SSH keys — Andrew Stiefel