Magit se connectant à github avec une clé ssh alternative
J'ai deux comptes github - un personnel et un pour mon travail. Dans la plupart de mes dépôts, j'utilise mon compte professionnel et magit fonctionne très bien. Dans quelques dépôts personnels, j'ai ceci dans .git/config
:
sshCommand = ssh -i /my/home/directory/.ssh/personal/id_rsa -F /dev/null
Cela fonctionne bien à partir de la ligne de commande pour des choses comme git push
, mais lorsque j'essaye de pousser depuis magit, j'obtiens cette erreur:
ERROR: Permission to <personalaccount>/unified_docs_switcher.git denied to <workaccount>.
Étant donné que mon compte professionnel est mentionné dans le message d'erreur, il semble que la connexion de magit à git ignore la ligne dans .git/config
.
Y a-t-il une autre configuration que je peux ajouter à magit pour reconnaître cela?
Existe-t-il une solution différente / meilleure dans magit pour utiliser différents comptes github?
(Edit: emacs 27.1 sur MacOS à partir d' ici , testé sur magit 2.90.1 de melpa-stable puis 20210105.1030 de melpa)
Réponses
Il existe une solution Git pure que vous pouvez utiliser dans votre global .gitconfig
- j'utilise une include.path
configuration pour les choses personnelles par défaut:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
et ce fichier contient le nom, l'e-mail personnel (utilisé pour SSH et l'identification de mon compte GitHub) et l'ID de clé GPG:
# .gitconfig-personal
[user]
name = jidicula
email = "[email protected]"
signingkey = "<personalKeyID>"
Ensuite, en dessous de cela en premier [include]
dans mon global .gitconfig
, j'ai une includeIf.path
configuration de travail à utiliser si le dépôt correspond à un modèle fourni en argument à includeIf
:
# .gitconfig
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
et ce fichier contient le nom, l'e-mail professionnel et l'ID de clé GPG de l'e-mail professionnel:
# .gitconfig-work
[user]
name = jidicula
email = "[email protected]"
signingkey = "<workKeyID>"
Tout ce qui se trouve dans cette deuxième configuration écrasera ce qui a été défini par défaut - associé au conditionnel includeIf
, nous obtenons une configuration Git dépendante du chemin.
En .gitconfig
réunissant le monde entier, nous obtenons:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
Ensuite, vous remplissez .gitconfig-personal
et gitconfig-work
avec vos configurations spécifiques au contexte telles que les e-mails, les clés, les noms d'utilisateur, le comportement d'extraction, les modèles de messages de validation, etc.
Vous pouvez en savoir plus sur les inclusions conditionnelles ici .