Иногда бывают ситуации, когда требуется иметь разные .gitconfig для разных репозиториев. Например, если чёртов Яндекс требует полный доступ к твоему GitHub аккаунту и тебе приходится каждый раз для сдачи заданий менять конфиг на использование отдельного пользователя.
Так вот, вчера от Никиты я узнал, что использовать полноценный скрипт, который будет подменять туда-обратно определённые строчки из .gitconfig, было, мягко сказать, не обязательно.
Для этого у самого Git существует такой механизм, как includeIf. И через него в .gitconfig можно настроить использование отдельных учётных данных при работе из определённой директории.
Например:
# .gitconfig
[user]
name = our-bless-username
email = aboba@gmail.com
[core]
editor = nvim
quotepath = off
[color]
ui = auto
[push]
autoSetupRemote = true
[pull]
rebase = true
[includeIf "gitdir:~/Projects/csit/Yandex/"]
path = ~/.gitconfig-yandex
# .gitconfig-yandex
[user]
name = their-mock-dummy-name
email = aboba2@yandex.ru
Жаль, что нельзя так же удобно настроить использование разных ssh ключей для разных репозиториев при git push, потому что вариант с другим Host, конечно, работает, но выглядит немного костыльно. Но на всякий случай его тоже здесь опишу, мало ли кто-то не знает:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
AddKeysToAgent yes
UseKeychain yes
Host ya.github.com
HostName github.com
User git
IdentityFile ~/.ssh/yandex_gh_key
AddKeysToAgent yes
UseKeychain yes
И при клонировании репозитория вместо github.com просто указывается ya.github.com:
git clone git@ya.github.com:username/repo.git
Однако эта штука у меня иногда не хочет работать, пока принудительно не убьёшь ssh-agent и он не перезапустится. Так что для ненависти к Яндекс Практикуму причин всё ещё хватает)
