Возникла потребность настраивать по-разному конфиги гита для разных проектов (email контактный поменять, хотя бы, или хук на прогон тестов повесить).
Ну и понятно, что как-то эти конфиги подкладывать туда-сюда – не слишком увлекательно. К счастью, в свежих версиях гита – есть инклюды. В том числе – по условию – includeIf
. Вот ими и стоит воспользоваться.
Основной конфиг git
Общая концепция такова – в основном конфиге ~/.gitconfig
– перечислить (под условиями) конфиги “зависимые”, а все специфичные настройки прописать уже в них. Ничего экстраординарного, в общем.
Примерно вот так у меня это выглядит, по условию включается конфиг из файла gitconfig-project-1
:
[user]
name = Dmitry
email = dimio@dimio.org
[includeIf "gitdir:~/project-1/repos/"]
path = ~/.config/git/gitconfig-project-1
Важный момент – директорию после gitdir:
нужно указывать без отделения пробелом.
Вложенный конфиг git
А вот так – выглядит сам файл ~/.config/git/gitconfig-project-1
[user]
email = dmitry@dimio.org
[core]
hooksPath = ~/.config/git/hooks/
autocrlf = input
sshCommand = "ssh -F ${HOME}/.ssh/config-project-1"
Тут уже как раз и переопределены email, хуки (для этого проекта активирован автопрогон тестов в pre-push
хуке) и конфиг ssh (там специфические настройки для доступа к репозиторию по ключу).
Разделение credentials
Раз уж зашла речь о разделении конфигов и о доступе – можно сразу настройки доступа по http(s)
разбить немного.
Включаются они так: git config --global credential.helper store
. И после этого лежат в ~/.git-credentials
в открытом виде!
Разделить их для разных репозиториев внутри одного хоста – можно так (на примере github): git config --global credential.
github.com
.useHttpPath true
И тогда в .git-credentials
будут отдельные записи лежать:
https://<USERNAME>:<PASSWORD>@github.com/path/to/repo1.git
https://<USERNAME>:<PASSWORD>@github.com/path/to/repo2.git
Но, безусловно, удобней (да и безопасней, пожалуй) – пользоваться доступом с ssh ключами.