Magit conectando-se ao github com chave ssh alternativa

Jan 12 2021

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

3 jidicula Jan 24 2021 at 09:09

Existe uma solução Git pura que você pode usar em seu global .gitconfig- eu uso uma include.pathconfiguraçã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.pathconfiguraçã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.