Задать вопрос
@ElenaSviridova

Можно ли пользоваться двумя аккаунтами в Gitlab одновременно?

Каким образом пушить изменения в проекты разных аккаунтов?
  • Вопрос задан
  • 149 просмотров
Подписаться 1 Простой 12 комментариев
Пригласить эксперта
Ответы на вопрос 2
Опишу, как это сделать на Маке и Линуксе. Про Винду даже не спрашивайте, уже лет 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 будет автоматически использовать соответствующий ключ и данные автора.
Ответ написан
@Everything_is_bad
нет, потому что я запрещаю это делать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы