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.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 .