Как управлять несколькими учетными записями 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, поэтому пользователей легко различать.