Magit подключается к github с альтернативным ключом ssh
У меня две учетные записи на github - одна личная, а другая - для работы. В большинстве репозиториев я использую свой рабочий аккаунт, и magit работает нормально. В паре личных репозиториев у меня есть это в .git/config
:
sshCommand = ssh -i /my/home/directory/.ssh/personal/id_rsa -F /dev/null
Это хорошо работает из командной строки для таких вещей, как git push
, но когда я пытаюсь нажать из magit, я получаю эту ошибку:
ERROR: Permission to <personalaccount>/unified_docs_switcher.git denied to <workaccount>.
Поскольку моя рабочая учетная запись упоминается в сообщении об ошибке, похоже, что соединение magit с git игнорирует строку в .git/config
.
Есть ли еще какая-нибудь конфигурация, которую я могу добавить в magit, чтобы распознать это?
Есть ли в magit другое / лучшее решение для использования разных учетных записей github?
(Изменить: emacs 27.1 на MacOS отсюда , протестировано на magit 2.90.1 из melpa-stable, а затем на 20210105.1030 из melpa)
Ответы
Есть чистое решение Git, которое вы можете использовать в своей глобальной сети .gitconfig
- include.path
по умолчанию я использую конфигурацию для личных вещей:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
и этот файл содержит имя, личный адрес электронной почты (который используется для SSH и идентифицирует мою учетную запись GitHub) и идентификатор ключа GPG:
# .gitconfig-personal
[user]
name = jidicula
email = "[email protected]"
signingkey = "<personalKeyID>"
Затем, ниже этого первого [include]
в моем глобале .gitconfig
, у меня есть includeIf.path
рабочая конфигурация , которую я могу использовать, если репо соответствует шаблону, предоставленному в качестве аргумента для includeIf
:
# .gitconfig
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
и этот файл содержит имя, рабочий адрес электронной почты и идентификатор ключа GPG рабочего адреса электронной почты:
# .gitconfig-work
[user]
name = jidicula
email = "[email protected]"
signingkey = "<workKeyID>"
Все в этой второй конфигурации перезапишет все, что было определено по умолчанию - в сочетании с условием includeIf
мы получаем конфигурацию Git, зависящую от пути.
Собирая .gitconfig
все вместе, мы получаем:
# .gitconfig
# default user email and key
[include]
path = .gitconfig-personal
# When working with Work
[includeIf "gitdir:**/work/**/.git"]
path = .gitconfig-work
Тогда вы бы заполнить .gitconfig-personal
и gitconfig-work
с вашей конкретными условиями конфиги , как электронная почта, ключи, имена пользователей, Pull поведение, совершать шаблоны сообщений и т.д.
Вы можете узнать больше об условных включениях здесь .