Magit se conecta a github con una tecla ssh alternativa

Jan 12 2021

Tengo dos cuentas de github: una personal y otra para mi trabajo. En la mayoría de mis repositorios, uso mi cuenta de trabajo y magit funciona bien. En un par de repositorios personales, tengo esto en .git/config:

sshCommand = ssh -i /my/home/directory/.ssh/personal/id_rsa -F /dev/null

Esto funciona bien desde la línea de comandos para cosas como git push, pero cuando intento presionar desde magit, aparece este error:

ERROR: Permission to <personalaccount>/unified_docs_switcher.git denied to <workaccount>.

Dado que mi cuenta de trabajo se menciona en el mensaje de error, parece que la conexión de magit con git está ignorando la línea .git/config.

¿Hay alguna otra configuración que pueda agregar a magit para reconocer esto?

¿Existe una solución diferente / mejor en magit para usar diferentes cuentas de github?

(Editar: emacs 27.1 en MacOS desde aquí , probado en magit 2.90.1 desde melpa-stable y luego 20210105.1030 desde melpa)

Respuestas

3 jidicula Jan 24 2021 at 09:09

Hay una solución de Git pura que puede usar en su global .gitconfig; yo uso una include.pathconfiguración para cosas personales de forma predeterminada:

# .gitconfig
# default user email and key
[include]
        path = .gitconfig-personal

y ese archivo contiene el nombre, el correo electrónico personal (que se usa para SSH y la identificación de mi cuenta de GitHub) y el ID de clave GPG:

# .gitconfig-personal
[user]
    name = jidicula
    email = "[email protected]"
    signingkey = "<personalKeyID>"

Luego, debajo de eso primero [include]en mi global .gitconfig, tengo una includeIf.pathconfiguración de trabajo para usar si el repositorio coincide con un patrón proporcionado como argumento para includeIf:

# .gitconfig
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
        path = .gitconfig-work

y ese archivo contiene el nombre, el correo electrónico del trabajo y el ID de clave GPG del correo electrónico del trabajo:

# .gitconfig-work
[user]
        name = jidicula
        email = "[email protected]"
        signingkey = "<workKeyID>"

Cualquier cosa en esta segunda configuración sobrescribirá lo que se definió de forma predeterminada; junto con el condicional includeIf, obtenemos una configuración de Git dependiente de la ruta.

Poniendo .gitconfigtodo lo global junto, obtenemos:

# .gitconfig
# default user email and key
[include]
        path = .gitconfig-personal
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
        path = .gitconfig-work

Luego, llenaría .gitconfig-personaly gitconfig-workcon sus configuraciones específicas de contexto como correos electrónicos, claves, nombres de usuario, comportamiento de extracción, plantillas de mensajes de confirmación, etc.

Puede leer más sobre las inclusiones condicionales aquí .