Недавно я переустановил linux на своем старом ноутбуке. И я хотел настроить git таким образом, чтобы можно было управлять несколькими учетными записями. По сути, я хотел иметь возможность делать git pull & push
, не набирая каждый раз имя пользователя и пароль.
Итак, я немного погуглил и нашел хорошую отправную точку — сделать разделение по каталогам. Пример: ~/code/work/
и ~/code/personal/
— для работы и личного использования соответственно.
Все хорошо, но я хочу иметь учетную запись по умолчанию, доступную из каталога HOME ~/
для .dotfiles и других вещей. А затем в ~/code/[USER]/
— переключаться на другую учетную запись для конкретного использования.
Пусть у нас будет два пользователя: Diogenes (по умолчанию) и Epicurus (вторичный).
После установки git я настроил его как обычно.
git config --global user.name "Diogenes the Cynic"
git config --global user.email diogenes@example.com
git config --global credential.helper store
Последняя строка просто говорит git хранить учетные данные в файле по умолчанию, ~/.git-credentials
. Это файл, в котором я размещаю персональный маркер доступа (PAT) для учетной записи по умолчанию (Diogenes). Обратите внимание, что все это в виде обычного текста, так что это не безопасно. Но я готов пойти на риск, к тому же я не храню пароли, только PAT. PAT на самом деле довольно хорошая идея. Я могу создать его с ограниченными/минимальными правами, только права на чтение/запись, и использовать в своем ноутбуке (где я могу экспериментировать с вещами). Так что даже если PAT будет украден или что-то в этом роде, мой пароль будет в безопасности. Я просто отзываю этот PAT.
Формат: https://[USERNAME]:[ACCES_TOKEN]@[gitlab.com | github.com]
. Итак, я захожу на gitlab, создаю PAT и добавляю следующую строку.
https://diogenes:super-secure-PAT@gitlab.com
Итак, теперь я могу git pull & push
на gitlab без ввода учетных данных в любой директории, как Diogenes.
До этого момента ~/.gitconfig
выглядел следующим образом:
[user]
name = Diogenes
email = diogenes@example.com
[credential]
helper = store
Теперь пришло время добавить новую учетную запись, Epicurus.
Во-первых, я создаю новый каталог ~/code/epicurus/
.
Во-вторых, я добавляю в ~/.gitconfig
строки, которые говорят git применять различные конфигурации в зависимости от директории, в которой я сейчас нахожусь.
[includeIf "gitdir:~/code/epicurus/"]
path = ~/code/epicurus/.gitconfig
В-третьих, я настраиваю нового git-пользователя ~/code/epicurus/.gitconfig
и указываю, где найти учетные данные.
[user]
name = Epicurus
email = epicurus@example.com
[credential]
helper = store --file=/home/diogenes/code/epicurus/.git-credentials
В-четвертых, я беру PAT и сохраняю его в ~/code/epicurus/.git-credentials
.
https://epicurus:[ACCES_TOKEN]@gitlab.com
И теперь в дереве каталогов ~/code/epicurus/
я могу git pull & push
на gitlab, не вводя credentials как Epicurus, и везде как Diogenes.
Структура файла
.git-credentials
.gitconfig
└─ code
└─ epicurus
├─ .git-credentials
└─ .gitconfig
Содержание
~/.gitconfig
[user]
name = Diogenes
email = diogenes@example.com
[credential]
helper = store
[includeIf "gitdir:~/code/epicurus/"]
path = ~/code/epicurus/.gitconfig
~/.git-credentials
https://diogenes:[ACCES_TOKEN]@gitlab.com
~/code/epicurus/.gitconfig
[user]
name = Epicurus
email = epicurus@example.com
[credential]
helper = store --file=/home/diogenes/code/epicurus/.git-credentials
~/code/epicurus/.git-credentials
https://epicurus:[ACCES_TOKEN]@gitlab.com