Иногда бывают ситуации, когда требуется иметь разные .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 и он не перезапустится. Так что для ненависти к Яндекс Практикуму причин всё ещё хватает)