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.path
configuració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.path
configuració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 .gitconfig
todo 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-personal
y gitconfig-work
con 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í .