Magit conectando-se ao github com chave ssh alternativa
Tenho duas contas no github - uma pessoal e outra para meu trabalho. Na maioria dos meus repos, eu uso minha conta de trabalho e o magit funciona bem. Em alguns repositórios pessoais, tenho isso em .git/config
:
sshCommand = ssh -i /my/home/directory/.ssh/personal/id_rsa -F /dev/null
Isso funciona bem na linha de comando para coisas como git push
, mas quando tento fazer push do magit, recebo este erro:
ERROR: Permission to <personalaccount>/unified_docs_switcher.git denied to <workaccount>.
Visto que minha conta de trabalho é mencionada na mensagem de erro, parece que a conexão do magit com o git está ignorando a entrada de linha .git/config
.
Existe alguma outra configuração que eu possa adicionar ao magit para reconhecer isso?
Existe uma solução diferente / melhor em magit para usar contas diferentes do github?
(Editar: emacs 27.1 no MacOS a partir daqui , testado no magit 2.90.1 do melpa-stable e então 20210105.1030 do melpa)
Respostas
Existe uma solução Git pura que você pode usar em seu global .gitconfig
- eu uso uma include.path
configuração para coisas pessoais por padrão:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
e esse arquivo contém nome, e-mail pessoal (que é usado para SSH e para identificar minha conta GitHub) e ID de chave GPG:
# .gitconfig-personal
[user]
name = jidicula
email = "[email protected]"
signingkey = "<personalKeyID>"
Então, abaixo daquele primeiro [include]
no meu global .gitconfig
, tenho uma includeIf.path
configuração de trabalho para usar se o repo corresponder a um padrão fornecido como um argumento para includeIf
:
# .gitconfig
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
e esse arquivo contém nome, e-mail comercial e e-mail comercial ID da chave GPG:
# .gitconfig-work
[user]
name = jidicula
email = "[email protected]"
signingkey = "<workKeyID>"
Qualquer coisa nesta segunda configuração sobrescreverá tudo o que foi definido por padrão - emparelhado com a condicional includeIf
, obtemos a configuração Git dependente do caminho.
Juntando o global .gitconfig
, obtemos:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
Then you'd fill .gitconfig-personal
and gitconfig-work
with your context-specific configs like emails, keys, usernames, pull behaviour, commit message templates, etc.
You can read more about conditional includes here.