Git config с разделением по проектам

Возникла потребность настраивать по-разному конфиги гита для разных проектов (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 ключами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *