Опишу, как это сделать на Маке и Линуксе. Про Винду даже не спрашивайте, уже лет 7 как не помню.
Для работы с двумя аккаунтами GitLab с одной машины требуется настроить Git для использования разных SSH-ключей. Каждому аккаунту будет соответствовать свой ключ.
1: Создание отдельных SSH-ключей
Для каждого аккаунта GitLab необходим уникальный SSH-ключ. Если стандартный ключ (`~/.ssh/id_rsa`) уже существует, его можно оставить для первого аккаунта. Для второго аккаунта создаётся новый.
В терминале выполняется команда для генерации нового ключа. В ней `"email_второго_аккаунта@example.com"` заменяется на почту, привязанную ко второму аккаунту GitLab. При запросе имени файла нужно указать уникальное имя, чтобы не перезаписать существующие ключи.
# Имя id_gitlab_work можно заменить на любое другое
ssh-keygen -t ed25519 -C "email_второго_аккаунта@example.com" -f ~/.ssh/id_gitlab_work
В результате у нас будет две пары ключей:
- `~/.ssh/id_rsa` и `id_rsa.pub` (для первого аккаунта)
- `~/.ssh/id_gitlab_work` и `id_gitlab_work.pub` (для второго)
2: Добавление SSH-ключей в аккаунты GitLab
Далее публичные части ключей (`.pub`) добавляются в соответствующие аккаунты GitLab.
Для первого аккаунта это будет
~/.ssh/id_rsa.pub
Для второго аккаунта
~/.ssh/id_gitlab_work.pub
Кликаем на аватарку в gitlab, выбираем
"Edit Profile" и в секции
"SSH Keys" обоих аккаунтов добавляем соответствующие им публичные ключи
3: Настройка SSH-клиента
Чтобы система знала, какой ключ для какого репозитория использовать, настраивается файл конфигурации SSH. В нём создаются псевдонимы для `gitlab.com`.
1. Нужно открыть или создать файл `~/.ssh/config`.
Если его нет, создаём:
touch ~/.ssh/config
2. Открываем файл, добавляем конфигурацию, которая создаёт два «хоста», `gitlab.com-personal` и `gitlab.com-work`, которые оба ссылаются на `gitlab.com`, но используют разные файлы ключей.
# Первый аккаунт (например, личный)
Host gitlab.com-personal
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
# Второй аккаунт (например, рабочий)
Host gitlab.com-work
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_gitlab_work
IdentitiesOnly yes
4: Настройка локальных репозиториев
Теперь необходимо обновить URL-адреса удалённых репозиториев в локальных проектах, чтобы они использовали созданные псевдонимы.
1. В директории проекта для
первого аккаунта выполняется команда для изменения URL.
Проверить текущий адрес:
git remote -v
Заменить `gitlab.com` на псевдоним
gitlab.com-personal:
git remote set-url origin git@gitlab.com-personal:username/repo.git
2. В директории проекта для
второго аккаунта выполняется аналогичная команда, но с другим псевдонимом:
git remote set-url origin git@gitlab.com-work:otheruser/other-repo.git
При клонировании новых репозиториев следует сразу использовать адрес с нужным псевдонимом:
# Клонирование с первого аккаунта
git clone git@gitlab.com-personal:username/repo.git
# Клонирование со второго аккаунта
git clone git@gitlab.com-work:otheruser/other-repo.git
5: (Рекомендуется) Настройка автора коммитов
Чтобы коммиты в каждом репозитории подписывались правильными данными, а не глобальными настройками вашего git, следует задать имя и почту автора локально для каждого проекта.
В репозитории для
первого аккаунта:
git config user.name "Имя для первого аккаунта"
git config user.email "email_первого_аккаунта@example.com"
В репозитории для
второго аккаунта:
git config user.name "Имя для второго аккаунта"
git config user.email "email_второго_аккаунта@example.com"
После завершения настройки, при выполнении `git push` из разных директорий, Git будет автоматически использовать соответствующий ключ и данные автора.