Git для нескольких аккаунтов: настройка до первого коммита
Один Git на рабочие и личные проекты часто заканчивается коммитом не с того адреса или push в чужой аккаунт. Ниже — безопасная схема с отдельными SSH-ключами, алиасами и автоматическим выбором профиля.

Один Git может отправлять код в рабочий GitHub, личный GitLab и корпоративный сервер без постоянного ввода паролей. Но только если заранее разделить три вещи: имя и email автора коммита, SSH-ключ для входа и URL удалённого репозитория. Эта инструкция рассчитана на Git 2.40 и новее, OpenSSH 8 и новее и занимает около 20–30 минут.
Что нужно иметь до начала
Подготовьте установленный Git, доступ к аккаунтам и права на создание SSH-ключей. Команды ниже подходят для macOS и Linux. В Windows 10/11 используйте Git Bash или встроенный OpenSSH; пути с ~ в Git Bash означают домашнюю папку пользователя.
- Git 2.40 или новее. Версию проверьте командой
git --version. - Две папки для проектов, например
~/workи~/personal. - Рабочий и личный email, которые должны попасть в историю коммитов.
- Доступ к настройкам SSH на компьютере и возможность добавить публичный ключ в каждый сервис.
- Пустые или уже существующие репозитории, для которых вы настраиваете профили.
Проверка: команда git --version выводит установленную версию, а папки для проектов существуют и доступны на запись.
SSH отвечает на вопрос «кто может отправить код», а Git-конфигурация — «чьим именем подписан коммит». Один ключ не задаёт автора коммита автоматически.
Шаг 1. Разложите проекты по папкам
Автоматический выбор профиля проще всего привязать к пути репозитория. Поэтому рабочие проекты кладите под один каталог, а личные — под другой.
Создайте каталоги:
mkdir -p ~/work ~/personalЕсли каталоги уже есть, команда ничего не удалит.
Проверка: выполните
ls -ld ~/work ~/personal. Обе строки должны указывать на существующие каталоги.
Шаг 2. Создайте отдельные SSH-ключи
Отдельный ключ для каждого аккаунта позволяет отозвать доступ к одному сервису, не ломая остальные. Не заменяйте YOUR_WORK_EMAIL и YOUR_PERSONAL_EMAIL реальными адресами в комментарии ключа, если не хотите их публиковать: комментарий не участвует в проверке, но виден в файле публичного ключа.
Создайте рабочий ключ:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C 'YOUR_WORK_EMAIL'На запрос passphrase задайте отдельную парольную фразу. Не сохраняйте приватный ключ в облачном диске и не отправляйте файл без расширения
.pubдругим людям.Проверка: появились файлы
~/.ssh/id_ed25519_workи~/.ssh/id_ed25519_work.pub.Создайте личный ключ:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_personal -C 'YOUR_PERSONAL_EMAIL'Имя файла должно отличаться от рабочего, иначе новый ключ может перезаписать старый.
Проверка: в
~/.sshесть обе пары файлов, а приватные файлы имеют права, ограничивающие доступ владельцем.Запустите агент и добавьте ключи:
eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519_work ssh-add ~/.ssh/id_ed25519_personalВ Windows Git Bash агент может быть уже запущен. Если
ssh-addсообщает, что не может подключиться к агенту, запустите службу OpenSSH Authentication Agent средствами Windows или используйте агент, который поставляется с вашим менеджером паролей.Проверка:
ssh-add -lпоказывает два отпечатка ключей, а не сообщениеThe agent has no identities.
Шаг 3. Свяжите имена SSH с нужными ключами
SSH по умолчанию обращается к одному имени хоста, например github.com. Алиасы позволяют сделать два разных адреса: github-work и github-personal. В URL репозитория затем будет видно, какой ключ используется.
Создайте или откройте файл
~/.ssh/config:Host github-work HostName github.com User git IdentityFile ~/.ssh/id_ed25519_work IdentitiesOnly yes Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_ed25519_personal IdentitiesOnly yesОтступы перед параметрами должны быть пробелами или табуляцией. Параметр
IdentitiesOnly yesзапрещает SSH перебирать другие ключи из агента и снижает риск входа не в тот аккаунт.Проверка: выполните
ssh -G github-workи найдите в выводеidentityfile ~/.ssh/id_ed25519_work. Для второго алиаса должен отображаться личный ключ.Скопируйте публичные ключи и добавьте их в соответствующие аккаунты:
cat ~/.ssh/id_ed25519_work.pub cat ~/.ssh/id_ed25519_personal.pubДобавляйте содержимое рабочего файла только в рабочий аккаунт, личного — только в личный. В публичном ключе одна длинная строка, начинающаяся с
ssh-ed25519.Проверка: команда
ssh -T git@github-workподтверждает аккаунт рабочего сервиса, аssh -T git@github-personal— личный. Точный текст ответа зависит от сервиса; сообщение о том, что shell-доступ запрещён, само по себе не означает ошибку, если сервис узнал пользователя.
Шаг 4. Настройте имя автора автоматически
SSH определяет право на push, но не меняет поля Author и Committer. Их задаёт Git. Условные подключения includeIf выбирают файл конфигурации по пути репозитория.
Откройте глобальный файл Git:
git config --global --editДобавьте в него:
[includeIf "gitdir:~/work/"] path = ~/.gitconfig-work [includeIf "gitdir:~/personal/"] path = ~/.gitconfig-personalОкончательный слеш важен: он указывает Git применять правило ко всем репозиториям внутри каталога.
Проверка:
git config --global --list --show-originпоказывает два блокаincludeIf.Создайте профиль для рабочих репозиториев:
cat > ~/.gitconfig-work <<'EOF' [user] name = YOUR_WORK_NAME email = YOUR_WORK_EMAIL EOFСоздайте личный профиль:
cat > ~/.gitconfig-personal <<'EOF' [user] name = YOUR_PERSONAL_NAME email = YOUR_PERSONAL_EMAIL EOFВ Windows Git Bash эти команды работают как показано. В обычном PowerShell создайте файлы вручную и вставьте те же секции.
Проверка: из каталога
~/workвыполнитеgit config user.email, затем из~/personal. Команды должны вывести разные адреса.
Сноска. includeIf — условительное подключение файла конфигурации Git. Правило не меняет настройки уже открытого терминала и не анализирует содержимое проекта: оно смотрит на путь к каталогу репозитория.
Шаг 5. Клонируйте репозитории через правильный алиас
Обычный URL git@github.com:owner/repository.git обходит созданные алиасы и может выбрать не тот ключ. Используйте имя из SSH-конфигурации.
Для рабочего проекта выполните:
cd ~/work git clone git@github-work:WORK_OWNER/WORK_REPOSITORY.gitДля личного:
cd ~/personal git clone git@github-personal:PERSONAL_OWNER/PERSONAL_REPOSITORY.gitЗамените владельца и репозиторий на реальные значения, но оставьте
github-workилиgithub-personal.Проверка: войдите в каталог проекта и выполните:
git remote -v git config user.name git config user.emailВ удалённом URL должен быть нужный алиас, а имя и email — соответствовать этому профилю.
Для уже клонированного репозитория исправьте URL:
git remote set-url origin git@github-work:WORK_OWNER/WORK_REPOSITORY.gitЕсли проект лежит не под
~/workили~/personal, условное правило не сработает. Временно задайте профиль только для этого репозитория:git config --local user.name 'YOUR_WORK_NAME' git config --local user.email 'YOUR_WORK_EMAIL'Проверка:
git config --show-origin --get-regexp '^(user\.|remote\.origin\.url$)'показывает источник каждого значения и правильный URL.
Если не получилось
- Permission denied (publickey). Сервис не принял ключ. Проверьте, что публичный ключ добавлен в нужный аккаунт, а в
~/.ssh/configсовпадают имя алиаса и путь к приватному ключу. Для подробного журнала используйтеssh -vT git@github-work, не публикуя вывод целиком: в нём могут быть локальные пути и имена. - Вход выполняется не в тот аккаунт. Обычно URL содержит
github.com, а не созданный алиас, или отсутствуетIdentitiesOnly yes. Исправьте URL командойgit remote set-url originи снова проверьтеssh -T. - Коммит подписан неправильным email. Git взял локальную настройку репозитория или не совпал путь с правилом
gitdir. Выполнитеgit config --show-origin --get-regexp '^user\.'и удалите ошибочное локальное значение командойgit config --local --unset-all user.email, если оно больше не нужно. - fatal: not a git repository. Проверка выполняется не внутри проекта. Перейдите в каталог, где находится папка
.git, либо запустите команду после клонирования. - Could not open a connection to your authentication agent. SSH-агент не запущен в текущей сессии. Запустите агент для своей ОС и повторите
ssh-add; сами ключи при этом создавать заново не нужно.
Что сделать дальше
Создайте тестовый коммит в каждом профиле и проверьте его автора до отправки в удалённый репозиторий. Затем добавьте проверку в рабочий процесс: перед первым push смотрите на git remote -v и git log -1 --format='%an <%ae>'. Если проекты нельзя разложить по каталогам, используйте локальные настройки user.name и user.email в каждом репозитории, а SSH-алиасы оставьте без изменений.
Инфографика для маркетплейса: Три главных преимущества товара короткими фразами, выноски в безопасной зоне превью, точный размер площадки.
Спросить за 60 ₽Источники: Git documentation: git-config, GitHub Docs: Managing multiple accounts
Частые вопросы
Можно ли использовать один SSH-ключ для всех аккаунтов?
Почему email в коммите не меняется после настройки SSH?
Что делать, если я уже сделал коммит с неправильным аккаунтом?
Можно ли настроить несколько аккаунтов без SSH, через HTTPS?
Что будет, если я не успею настроить профили до первого push?
Почему includeIf не сработал для уже существующего проекта?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.