Magit łączy się z githubem za pomocą alternatywnego klucza ssh

Jan 12 2021

Mam dwa konta na githubie - jedno osobiste i jedno do pracy. W większości moich repozytoriów używam konta służbowego i magit działa dobrze. W przypadku kilku repozytoriów osobistych mam to w .git/config:

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

Działa to dobrze z wiersza poleceń na takie rzeczy git push, ale kiedy próbuję naciskać z magit, pojawia się ten błąd:

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

Ponieważ moje konto służbowe jest wymienione w komunikacie o błędzie, wygląda na to, że połączenie magit z git ignoruje linię .git/config.

Czy jest jakaś inna konfiguracja, którą mogę dodać do magit, aby to rozpoznać?

Czy w Magit jest inne / lepsze rozwiązanie do korzystania z różnych kont Github?

(Edycja: emacs 27.1 na MacOS stąd , testowany na magit 2.90.1 z melpa-stable, a następnie 20210105.1030 z melpa)

Odpowiedzi

3 jidicula Jan 24 2021 at 09:09

Istnieje czyste rozwiązanie Git, którego możesz użyć w swoim globalnym .gitconfig- include.pathdomyślnie używam konfiguracji do rzeczy osobistych:

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

a ten plik zawiera imię i nazwisko, osobisty adres e-mail (używany do SSH i identyfikujący moje konto GitHub) oraz identyfikator klucza GPG:

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

Następnie, poniżej tego pierwszego [include]w moim globalnym .gitconfig, mam includeIf.pathkonfigurację roboczą do użycia, jeśli repozytorium pasuje do wzorca podanego jako argument do includeIf:

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

a ten plik zawiera imię i nazwisko, służbowy adres e-mail i służbowy adres e-mail identyfikator klucza GPG:

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

Cokolwiek w tej drugiej konfiguracji nadpisze wszystko, co zostało zdefiniowane domyślnie - w połączeniu z warunkowym includeIfotrzymamy konfigurację Git zależną od ścieżki.

Łącząc .gitconfigwszystko razem, otrzymujemy:

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

Wtedy wypełnić .gitconfig-personali gitconfig-workze swoimi configs kontekst specyficzne, takie jak e-maile, klucze, nazwy użytkowników, zachowanie pull, popełnić szablonów wiadomości, etc.

Możesz przeczytać więcej o warunkowych dołączeniach tutaj .