Magit łączy się z githubem za pomocą alternatywnego klucza ssh
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
Istnieje czyste rozwiązanie Git, którego możesz użyć w swoim globalnym .gitconfig
- include.path
domyś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.path
konfigurację 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 includeIf
otrzymamy konfigurację Git zależną od ścieżki.
Łącząc .gitconfig
wszystko 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-personal
i gitconfig-work
ze 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 .