Как разделить личные и рабочие git-конфиги без костылей
При работе с git репозиториями, частенько попадаешь в просак с таким:
git config --global user.name
git config --global user.email
Один раз забил свои явки-пароли и затем git при любом коммите или пуше будет подставлять эти данные. То есть в историю коммитов будет забиваться user.name и user.email. Это логично и понятно.
ЧИТАТЬ ПЕРВЫМ В ТЕЛЕГРАМ ЧИТАТЬ ПЕРВЫМ В MAX
Но если у тебя смешаны личные и рабочие репозитории, начинается цирк с конями. Я тысячу раз комитил в рабочую репу под личным user.name и user.email и получал за это по рукам. Получал конечно сам от себя.
Потому что смешивать личное и рабочее — фуфу!
Из этой ситуации можно выйти по-разному, кто-то изобретает безумные Bash скрипты или пишет хуки, кто-то постоянно правит конфиги перед пушем. Короче костыль на костыле. Но есть решение лучше и нативнее.
Расчехляем хоумлабу!
У нас будет 2 папки:
mkdir -p ~/projects/personal
mkdir -p ~/projects/work
Настраиваем основной конфиг:
vim ~/.gitconfig
[user]
name = Roman Shubin
email = shuba@bashdayz.ru
[includeIf "gitdir:~/projects/work/"]
path = ~/.gitconfig_work
Нюанс: / в конце work обязателен. Git интерпретирует gitdir: как префикс пути к каталогу .git.
Создаем рабочий конфиг ~/.gitconfig_work
[user]
name = Linux Factory
email = exe@linuxfactory.ru
На этом танцы с бубном закончились, проверяем:
mkdir -p ~/projects/personal/app
cd ~/projects/personal/app
git init
git config user.email
git config --show-origin user.email
Ага, видим что для личных проектов будет применяться shuba@bashdayz.ru и берется он из ~/.gitconfig. Последние 2 команды, как раз выводят эту информацию в терминал. Хорошо, теперь:
mkdir -p ~/projects/work/app
cd ~/projects/work/app
git init
git config user.email
git config --show-origin user.email
Да твоюж мать! Видим Linux Factory и exe@linuxfactory.ru. Что и требовалось доказать, данные берутся из файла ~/.gitconfig_work.
Всё, мы успешно разделили контекст между личными и рабочими проектами. Таких инклудов ты можешь насоздавать сколько угодно. Самое главное это работает без костылей и каких-то лишних обвесов вокруг git.
Git скрывает очень много интересного и не всегда это очевидно. Такие дела, изучай!