Magit Verbindung mit Github mit alternativem SSH-Schlüssel

Jan 12 2021

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

3 jidicula Jan 24 2021 at 09:09

Es gibt eine reine Git-Lösung, die Sie in Ihrer globalen verwenden können .gitconfig- ich verwende include.pathstandardmäß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 .gitconfigich zuerst in meinem globalen includeIf.pathFormat 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 includeIfwir eine pfadabhängige Git-Konfiguration.

Wenn .gitconfigwir 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-personalund gitconfig-workmit kontextspezifischen Konfigurationen wie E - Mails, Schlüssel, Benutzernamen, Pull Verhalten verpflichten Nachrichtenvorlagen usw.

Weitere Informationen zu bedingten Includes finden Sie hier .