Представьте себе следующую ситуацию:
- У вас есть только один ноутбук
- У вас есть личный аккаунт GitHub
- Ваш работодатель также хранит код на GitHub.
- Вам нужно коммитить свой личный код в личные репозитории, но также и рабочий код в репозитории работодателя.
- Вы не можете сделать это из своего личного аккаунта, но не хотите создавать дополнительный (с корпоративной электронной почтой).
Что делать в такой ситуации? Есть способ, как настроить свой ноутбук так, чтобы он фиксировал рабочие репозитории с рабочими учетными данными, а личные — с личными.
Это решение основано на двух аспектах:
- исправление конфигурации SSH
- переписывание git URL
Главное преимущество этого подхода в том, что он не требует дополнительной работы. Вам не нужно будет менять удаленные URL или запоминать, как клонировать вещи по-другому. Об этом позаботится вторая часть (переписывание URL).
Прежде всего, давайте исправим нашу конфигурацию .ssh. Предположим, что у вас есть 2 ssh ключа, ваш личный (github_personal
) и ваш рабочий (github_work
). Как создать ssh-ключи, вы можете прочитать в документации GitHub.
~/.ssh/config
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github_personal
# Work GitHub
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/github_work
Host *
AddKeysToAgent yes
Оба этих конфига имеют одинакового пользователя и домен, но мы позаботимся об этом позже. Далее — глобальный конфиг git.
~/.gitconfig
Здесь нам нужно добавить имя и email по умолчанию (те, которые мы использовали при создании ssh для нашего личного аккаунта).
[user]
name = My Name
email = personal@personal.email
[includeIf "gitdir:~/path/work_dir/"]
path = ~/path/work_dir/.gitconfig
[url "github-work:work-github-org-name/"]
insteadOf = git@github.com:work-github-org-name/
Что здесь происходит? Во-первых, задаем имя и email по умолчанию. Во-вторых, указываем на использование локального файла .gitconfig
для всех репозиториев, расположенных по маске ~/path/work_dir/
. И последнее, замените github.com
(учетная запись по умолчанию для Github) на профиль, который мы установили под github-work
в .ssh/config
.
Последняя часть — модификация локального .gitconfig
для всех наших рабочих репозиториев:
~/path/work_dir/.gitconfig
Это легко — просто замените свой email на корпоративный.
[user]
email = work@work.email
Вот и все! Пока вы храните все рабочие репозитории в ~/path/work_dir/
, а личные материалы в другом месте, git будет использовать правильный SSH ключ при выполнении pulls/clones/pushes на сервер, а также будет прикреплять правильный адрес электронной почты ко всем вашим коммитам.
Как проверить? Клонируйте репозиторий по SSH, перейдите в эту папку и выполните git config --get user.email
.