Magit Verbindung mit Github mit alternativem SSH-Schlüssel
Ich habe zwei Github-Accounts - einen persönlichen und einen für meinen Job. In den meisten meiner Repos verwende ich mein Arbeitskonto und Magit funktioniert einwandfrei. In ein paar persönlichen Repos habe ich dies in .git/config
:
sshCommand = ssh -i /my/home/directory/.ssh/personal/id_rsa -F /dev/null
Dies funktioniert gut über die Befehlszeile für Dinge wie git push
, aber wenn ich versuche, von Magit zu pushen, erhalte ich diesen Fehler:
ERROR: Permission to <personalaccount>/unified_docs_switcher.git denied to <workaccount>.
Da mein Arbeitskonto in der Fehlermeldung erwähnt wird, scheint die Verbindung von magit zu git die Zeile in zu ignorieren .git/config
.
Gibt es eine andere Konfiguration, die ich zu magit hinzufügen kann, um dies zu erkennen?
Gibt es in Magit eine andere / bessere Lösung für die Verwendung verschiedener Github-Konten?
(Edit: Emacs 27.1 unter MacOS von hier , getestet auf Magit 2.90.1 von Melpa-Stable und dann 20210105.1030 von Melpa)
Antworten
Es gibt eine reine Git-Lösung, die Sie in Ihrer globalen verwenden können .gitconfig
- ich verwende include.path
standardmäßig eine Konfiguration für persönliche Dinge:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
und diese Datei enthält den Namen, die persönliche E-Mail-Adresse (die für SSH verwendet wird und mein GitHub-Konto identifiziert) und die GPG-Schlüssel-ID:
# .gitconfig-personal
[user]
name = jidicula
email = "[email protected]"
signingkey = "<personalKeyID>"
Darunter [include]
habe .gitconfig
ich zuerst in meinem globalen includeIf.path
Format eine Arbeitskonfiguration, die verwendet werden kann, wenn das Repo mit einem Muster übereinstimmt, das als Argument für Folgendes bereitgestellt wird includeIf
:
# .gitconfig
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
und diese Datei enthält Name, Arbeits-E-Mail und Arbeits-E-Mail-GPG-Schlüssel-ID:
# .gitconfig-work
[user]
name = jidicula
email = "[email protected]"
signingkey = "<workKeyID>"
Alles in dieser zweiten Konfiguration überschreibt alles, was standardmäßig definiert wurde - zusammen mit der Bedingung erhalten includeIf
wir eine pfadabhängige Git-Konfiguration.
Wenn .gitconfig
wir das Globale zusammenfügen, erhalten wir:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
Dann würden Sie füllen .gitconfig-personal
und gitconfig-work
mit kontextspezifischen Konfigurationen wie E - Mails, Schlüssel, Benutzernamen, Pull Verhalten verpflichten Nachrichtenvorlagen usw.
Weitere Informationen zu bedingten Includes finden Sie hier .