Умное управление настройками git

Порой приходиться работать с git-репозиториями, которые требуют различные индивидуальные настройки. К примеру, вы работаете с несколькими компаниями и для каждого репозитория необходимо указывать корпоративный email. Когда компаний и репозиториев мало, то можно вручную вносить изменения для каждого: git config user.email username@example.com. Но сейчас, во времена микросервисов, такой подход может быть утомительным.

Для решения этой проблемы, при работе с настройками git можно использовать include и includeIf. Они позволяют подтягивать часть конфигураций из другого источника. includeIf также содержит условие в зависимости от которого произойдет включение (вставка) конфигурации или нет. С всеми возможными вариантами условий можно знакомиться в документации Conditional includes.

В нашем случае, мы можем настроить email и подпись в зависимости от каталога, где находиться репозиторий. В .gitconfig:

[includeIf "gitdir:projects/company_a/"]
  path = .gitconfig-company-a
[includeIf "gitdir:projects/company_b/"]
  path = .gitconfig-company-b

К примеру, .gitconfig-company-a может быть следующим:

[user]
  email = username@company-a.com
  signingkey = ******

Теперь любой git-репозиторий, путь до которого включает projects/company_a/ будет использовать нужный адрес электронной почты и собственный ключ для подписания коммитов. Стоит также отметить, что gitdir проверяет весь путь, поэтому не советую задавать условие, которое содержит один единственный каталог.

Готово! Теперь у вас всегда будет нужный email, и ни кто из коллег не осудит вас за использование личного электронного адреса (и служба безопасности тоже).