Magit se conecta a github con una tecla ssh alternativa
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
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í .