Magit, alternatif ssh anahtarıyla github'a bağlanıyor

Jan 12 2021

İki github hesabım var - biri kişisel, diğeri işim için. Depolarımın çoğunda iş hesabımı kullanıyorum ve magit iyi çalışıyor. Birkaç kişisel depoda, bu var .git/config:

sshCommand = ssh -i /my/home/directory/.ssh/personal/id_rsa -F /dev/null

Bu, komut satırından iyi çalışır git push, ancak magit'ten itmeye çalıştığımda şu hatayı alıyorum:

ERROR: Permission to <personalaccount>/unified_docs_switcher.git denied to <workaccount>.

Hata mesajında ​​iş hesabımdan bahsedildiği için, magit'in git ile bağlantısı, girişi görmezden geliyor gibi görünüyor .git/config.

Bunu tanımak için magit'e ekleyebileceğim başka bir yapılandırma var mı?

Magit'te farklı github hesaplarını kullanmak için farklı / daha iyi bir çözüm var mı?

(Düzenleme: buradan MacOS üzerinde emacs 27.1, melpa-stabil'den magit 2.90.1 ve ardından melpa'dan 20210105.1030 üzerinde test edilmiştir)

Yanıtlar

3 jidicula Jan 24 2021 at 09:09

Global'inizde kullanabileceğiniz saf bir Git çözümü var .gitconfig- include.pathkişisel öğeler için varsayılan olarak bir yapılandırma kullanıyorum :

# .gitconfig
# default user email and key
[include]
        path = .gitconfig-personal

ve bu dosya adı, kişisel e-postayı (SSH için ve GitHub hesabımı tanımlamak için kullanılır) ve GPG anahtar kimliğini içerir:

# .gitconfig-personal
[user]
    name = jidicula
    email = "[email protected]"
    signingkey = "<personalKeyID>"

Ardından, [include]globalde ilk önce , repo bir argüman olarak sağlanan bir modelle eşleşirse kullanacağım .gitconfigbir includeIf.pathçalışma yapılandırmam var includeIf:

# .gitconfig
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
        path = .gitconfig-work

ve bu dosya adı, iş e-postasını ve iş e-postası GPG anahtar kimliğini içerir:

# .gitconfig-work
[user]
        name = jidicula
        email = "[email protected]"
        signingkey = "<workKeyID>"

Bu ikinci yapılandırmadaki herhangi bir şey, varsayılan olarak tanımlananın üzerine yazacaktır - koşullu ile birlikte, includeIfyola bağlı Git yapılandırması elde ederiz.

Küresel olanı bir .gitconfigaraya getirerek şunları elde ederiz:

# .gitconfig
# default user email and key
[include]
        path = .gitconfig-personal
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
        path = .gitconfig-work

Sonra doldururlardı .gitconfig-personalve gitconfig-worke-postalar, anahtarlar, kullanıcı adları, çekme davranışı, gibi bağlama özgü yapılandırmaları mesaj şablonları vb taahhüt ile

Koşullu içerir yaklaşık Daha okuyabilirsiniz burada .