Перейдём сразу к делу. Допустим, у вас есть один GitLab для личных проектов и один для работы. Проблем не возникнет, пока не придётся работать с ними одновременно.
Лично я предпочитаю, чтобы на моём компьютере всё, что связано с работой, было отделено от всего, что с ней не связано. Проблема здесь в том, что нельзя использовать один SSH-ключ с несколькими учётными записями GitLab. Например, с личной почтой должна быть связана одна учётная запись GitLab, а с рабочей почтой — другая. Это отличный способ отделить личное от работы, но он сопряжён с некоторыми трудностями.
Раз нельзя использовать один SSH-ключ к нескольким учётным записям GitLab с разными адресами электронной почты, создадим отдельные SSH-ключи для личных и рабочих проектов. Задача может показаться трудновыполнимой. На самом же деле она довольно проста, стоит только освоить основные моменты в её решении.
Первым делом создаём два SSH-ключа с помощью такой команды в терминале:
ssh-keygen -t rsa -C "[email protected]"
У ключей могут быть любые названия, но только не одинаковые: впоследствии будет ясно почему. Для SSH-ключа личных проектов я оставил значение по умолчанию, а SSH-ключ для рабочих проектов назвал work_rsa. Для каждого из ключей указываем рабочую и личную почту.
Следующей командой:
cd ~/.ssh && ll
мы фактически переходим в папку ~/.ssh и выводим список всех файлов. Здесь у нас оба ключа. Один с расширением .pub, другой — без.
-rw------- 1 sasa staff 419B Jan 19 11:24 work_rsa
-rw-r--r-- 1 sasa staff 106B Jan 19 11:24 work_rsa.pub
Тот, что с расширением .pub, — это открытый ключ. Он используется для хранения на таких сервисах, как GitHub или GitLab. При попытке подключения к SSH этот ключ сверяется с закрытым локальным ключом (с тем же именем, но без расширения). Если они совпадают, всё хорошо и можно выполнять такие операции, как push, clone, fetch, pull и т. д.
После этого неплохо бы разделить проекты локально, например для того, чтобы личные проекты находились в другой папке:
~/Private
~/Work
Проекты, допустим, такие: ~/Private/TennisApp или ~/Work/ACME. И ключи у них будут разные. Разделение проектов осуществляется посредством редактирования gitconfig, который находится в:
~/.gitconfig
Не перепутайте этот файл с ~/.ssh/config.
Редактируется файл .gitconfig следующим образом:
[includeIf "gitdir:Work/"]
path = .gitconfig-work
Это означает, что если проект находится в ~/Work, то будет задействован пользователь с электронной почтой ‘[email protected]’ и SSH-ключом ‘work_rsa’. А если проект в папке ~/Private (эта папка так же находится на компьютере), то будет использована электронная почта ‘[email protected]’ и ключ ‘id_rsa’.
Теперь создадим файл .gitconfig-work:
touch ~/.gitconfig-work
и поместим внутрь проект:
[user]
email = "[email protected]"
[core]
sshCommand = "ssh -i ~/.ssh/work_rsa"
Теперь всё настроено: можно выполнять все операции в git, при этом будут использоваться отдельные SSH-ключи и отдельная почта для каждого из проектов.
Надеюсь, это поможет вам настроить для использования несколько учётных записей GitLab.
Читайте также:
- Основы работы с Git
- Создание и отслеживание первого рабочего потока Github Actions
- Используй git-команды, как senior developer
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Sasha Fishter: How to handle multiple SSH keys with GitLab