Поиск по сайту:

Как управлять несколькими учетными записями Git в одной системе


Если вы пытались использовать Git с несколькими разными провайдерами или с несколькими разными учетными записями, вы можете столкнуться с проблемами одновременной аутентификации обоих. Вот как можно управлять двумя учетными записями, не сталкиваясь с конфликтами.

Как Git обрабатывает учетные записи

Первое, что нужно понять, это то, что Git является полностью локальным — ваш локальный репозиторий Git не контролируется сервером, на котором вы храните код. Он подключается к удаленному репозиторию только при отправке или извлечении обновлений. При этом он использует данные вашей учетной записи Git.

Единственные данные, которые он использует при этом, — это ваш адрес электронной почты и имя пользователя. Пароль для учетной записи запрашивается каждый раз, или сохраняется в цепочке ключей, или не имеет значения, если вы используете ключи SSH (что вам и следует делать). Если ваше имя пользователя отличается от имени учетной записи, для которой у вас есть учетные данные, вы не сможете выполнять push или pull, пока не исправите это. В некоторых случаях, если вы используете один и тот же адрес электронной почты для разных учетных записей, отправка может пройти, но отображаться в коммитах с другим именем пользователя, что может быть не идеальным.

Эти детали определены в конфигурации git. Вам, вероятно, приходилось запускать следующие команды, чтобы изменить имя учетной записи пользователя и адрес электронной почты:

git config --global user.name username
git config --global user.email email

Это установит глобальную конфигурацию для нового имени пользователя и электронной почты. Однако другой вопрос — результат. Поскольку он устанавливает его глобально, если вы хотите проверить проект в другой учетной записи, вы нарушите настройки для других ваших репозиториев.

Решение состоит в том, чтобы установить пользовательскую конфигурацию для каждого репозитория, который использует другую учетную запись. Установите свое глобальное имя пользователя и адрес электронной почты для наиболее часто используемой учетной записи, поскольку они будут использоваться по умолчанию для всех новых репозиториев и репозиториев без какой-либо настройки.

Однако для каждого репозитория, в котором используется другая учетная запись, вы можете не указывать
--глобальный флаг:

git config user.name username
git config user.email email

Это переопределяет конфигурацию по умолчанию, поэтому даже если вы измените свою учетную запись по умолчанию, локальная учетная запись все равно будет использоваться для этого репозитория.

Управление учетными данными для нескольких учетных записей

Вы все равно захотите использовать ключи SSH для Git, поэтому управление учетными данными не должно быть проблемой. Вполне допустимо везде использовать один и тот же SSH-ключ — ваш SSH-ключ привязан к вашей машине и, в свою очередь, к вашей личности. Это отличается от пароля; невозможно взломать его без взлома вашего персонального компьютера, что гораздо менее вероятно, чем утечка данных.

Однако, если вам по какой-то причине нужно использовать разные SSH-ключи, это можно сделать. Во-первых, вы должны убедиться, что вторичный ключ SSH загружен в вашу цепочку для ключей, обычно путем редактирования ~/.bashrc для вызова ssh-add при загрузке терминала:

ssh-add ~/.ssh/secondary

В противном случае вам придется использовать флаг -i и каждый раз указывать путь к ключу.

Чтобы Git использовал разные ключи для разных учетных записей, отредактируйте ~/.ssh/config и добавьте блок Host для каждой учетной записи:

# Personal account, - the default config
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

# Work account-1
Host github.com:secondary
  HostName github.com
  User git
  IdentityFile ~/.ssh/secondary

При этом будут использоваться разные ключевые файлы в зависимости от имени хоста, следующего за git@ в URL-адресе Git. Github добавляет ваше имя пользователя к URL-адресу Git, поэтому пользователей легко различать.