Вы пользуетесь git. У вас сгенерированы приватный и публичный ключи, связанные с вашим email-адресом. Один ключ и один адр ес. Но что если нужно больше одного? Как привязать несколько аккаунтов со своими данными и автоматизировать вход?
Генерация ssh-ключей
При генерации ключа следует указать ему отличное от дефолтного имя. По-умолчанию
используются имена id_rsa
(приватный ключ) и id_rsa_pub
(ключ публичный).
Чтобы создать файлы с другими именами или просто не затереть уже существующие
сгенерируем ключи с флагом -f
. Например, сделаем автономными данные для github.
$ ssh-keygen -t ed25519 -C "your_name@yourmail.domain" -f ~/.ssh/github
В качестве пользователя используйте данные вашей почтовой учётной записи. В
скрытом домашнем каталоге ~/.ssh
теперь лежат два файла с нестандартными именами:
github
и github.pub
. Содержимое последнего копируется на git-сервер.
Если ключи генерируются на сервере, перенести их на локальную машину можно так:
# на сервере, 7021 - нестандартный порт
$ ssh company_user@server.domain -p 7021
$ ssh-keygen -t ed25519 -C "user@server.domain" -f ~/.ssh/mycompany_key
# локально
$ scp -r -P 7021 company_user@server.domain:/home/company_user/.ssh/ /home/local_user/
Заходим на сервер по ssh под именем нужного пользователя, генерируем ключ.
Затем на локальной машине через scp копируем рекурсивно каталог с ssh-ключами.
Рекурсивно: -r
, если используется нестандартный порт: -P
.
Как автоматизировать вход
Допустим, у нас десятки ключей от git-серверов разных компаний. Как сказать git'у,
под какой учётной записью работать в каждом конкретном случае? Для этого
понадобится изменить конфигурацию. Создаём в ~/.ssh
файл config
с подходящими настройками:
Host github.com
Hostname github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github
Host mycompany.com
Hostname mycompany.com
Port 7021
IdentityFile ~/.ssh/mycompany_key
Теперь при работе в репозитории github или mycompany будут использованы ключи, соответствующие адресу домена. Что и требовалось.
Однако, коммиты закрепляются за одним только пользователем. Как вариант решения: указать одного пользователя глобально, а других для каждого репозитория (без флага global):
$ git config --local user.email myuser@mymail.doman
$ git config --local user.name myusername
Либо изменять автора на лету, при создании коммита:
$ git commit --author=myuser "commit"
Игнорируй всё
В работе каждый подбирает для себя наиболее удобный инструмент. Кто-то пользуется
простым текстовым редактором, кто-то предпочитает навороченные среды разработки.
Часто инструменты оставляют после себя «мусор», который не хотелось бы
тащить в .gitignore
публичного проекта.
Для того нам дан ещё один файл с настройками гита — .gitconfig. Открываем, вносим информацию.
# базовые настройки
[core]
autocrlf = input
quotepath = false
whitespace = cr-at-eol,indent-with-non-tab,blank-at-eol,space-before-tab
excludesfile = /home/local_user/.gitignore_global
# псевдонимы для команд
[alias]
ch = checkout
cm = commit -m
Всё внимание на строку excludesfile = /home/user/.gitignore_global
. Именно эта
волшебная настройка позволяет внести в .gitignore_global
(или любой другой файл)
то, что будет игнорироваться (не будет отправлено на сервер) всегда.