Magit подключается к github с альтернативным ключом ssh

Jan 12 2021

У меня две учетные записи на 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)

Ответы

3 jidicula Jan 24 2021 at 09:09

Есть чистое решение 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 поведение, совершать шаблоны сообщений и т.д.

Вы можете узнать больше об условных включениях здесь .