Magit si connette a GitHub con una chiave ssh alternativa
Ho due account GitHub: uno personale e uno per il mio lavoro. Nella maggior parte dei miei repository, utilizzo il mio account di lavoro e magit funziona bene. In un paio di repository personali, ho questo in .git/config
:
sshCommand = ssh -i /my/home/directory/.ssh/personal/id_rsa -F /dev/null
Funziona bene dalla riga di comando per cose come git push
, ma quando provo a eseguire il push da magit, ottengo questo errore:
ERROR: Permission to <personalaccount>/unified_docs_switcher.git denied to <workaccount>.
Poiché il mio account di lavoro è menzionato nel messaggio di errore, sembra che la connessione di magit a git stia ignorando la linea in .git/config
.
C'è qualche altra configurazione che posso aggiungere a Magit per riconoscerla?
Esiste una soluzione diversa / migliore in Magit per l'utilizzo di account GitHub diversi?
(Modifica: emacs 27.1 su MacOS da qui , testato su magit 2.90.1 da melpa-stable e poi 20210105.1030 da melpa)
Risposte
C'è una soluzione Git pura che puoi usare nel tuo globale .gitconfig
: io uso una include.path
configurazione per cose personali per impostazione predefinita:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
e quel file contiene il nome, l'email personale (che viene utilizzata per SSH e l'identificazione del mio account GitHub) e l'ID della chiave GPG:
# .gitconfig-personal
[user]
name = jidicula
email = "[email protected]"
signingkey = "<personalKeyID>"
Quindi, sotto quella prima [include]
nel mio globale .gitconfig
, ho una includeIf.path
configurazione di lavoro da utilizzare se il repository corrisponde a un modello fornito come argomento per includeIf
:
# .gitconfig
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
e quel file contiene il nome, l'email di lavoro e l'ID chiave GPG dell'email di lavoro:
# .gitconfig-work
[user]
name = jidicula
email = "[email protected]"
signingkey = "<workKeyID>"
Qualunque cosa in questa seconda configurazione sovrascriverà qualsiasi cosa sia stata definita per impostazione predefinita - in coppia con il condizionale includeIf
, otteniamo la configurazione Git dipendente dal percorso.
Mettendo .gitconfig
insieme il globale , otteniamo:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
Quindi riempirai .gitconfig-personal
e gitconfig-work
con le tue configurazioni specifiche del contesto come e-mail, chiavi, nomi utente, comportamento di pull, modelli di messaggi di commit, ecc.
Puoi leggere di più sugli include condizionali qui .