Magit se connectant à github avec une clé ssh alternative

Jan 12 2021

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

3 jidicula Jan 24 2021 at 09:09

Il existe une solution Git pure que vous pouvez utiliser dans votre global .gitconfig- j'utilise une include.pathconfiguration 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.pathconfiguration 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 .gitconfigré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-personalet gitconfig-workavec 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 .