May 24, 2022

2 аккаунта GitHub в VS Code и SSH ключи на Windows 10

Гайд для того, чтобы использовать 2 аккаунта GitHub (с разными SSH ключами) на одной машине.

Самый простой и не очень удобный вариант - это менять параметр IdentityFile в ssh-конфиге с помощью комментария # каждый раз, когда нужно сменить аккаунт для работы.

~/.ssh/config

Host github.com
HostName github.com
IdentityFile /c/users/lubus/.ssh/id_rsa
#IdentityFile /c/users/lubus/.ssh/id_rsa_pro
IdentitiesOnly yes

Да, метод так себе… И тем более это не решает вопрос с user.name и user.email.

Есть вариант использовать глобальные user.name / user.email и локальные (для конкретных репозиториев).

Допустим глобально мы homeUser (тот, который использует id_rsa):

git config --global user.name "homeUser"
git config --global user.email "[email protected]"

Эти данные кстати хранятся в ~/.gitconfig

[core]
autocrlf = true
excludesfile = ~/.gitexcludes
[user]
name = homeUser
email = [email protected]
...

И вот нам приходиться поработать с определенным репозиторием из под другого пользователя GitHub.

Мы можем сделать следующее:

git config --local user.name "proUser"
git config --local user.email "[email protected]"
git config --local core.sshCommand "ssh -i ~/.ssh/id_rsa_pro"

Теперь этим репозиторием управляет proUser с ключом id_rsa_pro.

А эти данные хранятся в: <REPO_DIR>/.git/config

[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
sshCommand = ssh -i ~/.ssh/id_rsa_pro
[user]
name = proUser
email = [email protected]
[remote "origin"]
url = [email protected]:proCompany/proRepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

Теперь из командной строки нам доступны коммиты в proRepo от пользователя proUser с ключом id_rsa_pro.

Что касается VS Code - то к сожалению он не поддерживает несколько аккаунтов (для синхронизации настроек и расширений).

Но есть неплохой выход!

Расширение git-autoconfig и его настройки:

"git-autoconfig.configList": [
{
"user.name": "proUser",
"user.email": "[email protected]",
"core.sshCommand": "ssh -i ~/.ssh/id_rsa_pro"

},
{
"user.name": "homeUser",
"user.email": "[email protected]"
}
]

Это расширение будет предлагать установить локального пользователя репозитория, если такой ещё не установлен в <REPO_DIR>/.git/config. Из перечня предложенного в настройках "git-autoconfig.configList" (выше).

Это очень важно, чтобы избежать путаницы аккаунтов и возможно больших неприятностей.

Вы наверное обратили внимание и на строку
"core.sshCommand": "ssh -i ~/.ssh/id_rsa_pro”

К сожалению, в данный момент этот плагин еще не поддерживает эту команду, но уже есть готовый Pull Request здесь.

И да, нам конечно придется выходить и входить в аккаунт GitHub через VS Code каждый раз, а так же в плагин GitHub Pull Requests and Issues, если вы его используете.

Если вы знаете способ лучше - не стесняйтесь поделиться им.