{"id":14284,"url":"\/distributions\/14284\/click?bit=1&hash=82a231c769d1e10ea56c30ae286f090fbb4a445600cfa9e05037db7a74b1dda9","title":"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0430\u043d\u0446\u044b \u0441 \u0441\u043e\u0431\u0430\u043a\u0430\u043c\u0438","buttonText":"","imageUuid":""}

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

Возникла потребность настраивать по-разному конфиги гита для разных проектов (email контактный поменять, хотя бы, или хук на прогон тестов повесить).

Ну и понятно, что как-то эти конфиги подкладывать туда-сюда – не слишком увлекательно. К счастью, в свежих версиях гита – есть инклюды. В том числе – по условию – includeIf. Вот ими и стоит воспользоваться.

Основной конфиг git

Общая концепция такова – в основном конфиге ~/.gitconfig – перечислить (под условиями) конфиги “зависимые”, а все специфичные настройки прописать уже в них. Ничего экстраординарного, в общем.

Примерно вот так у меня это выглядит, по условию включается конфиг из файла gitconfig-project-1:

[user] name = Dmitry email = [email protected] [includeIf "gitdir:~/project-1/repos/"] path = ~/.config/git/gitconfig-project-1

Важный момент – директорию после gitdir: нужно указывать без отделения пробелом.

Вложенный конфиг git

А вот так – выглядит сам файл ~/.config/git/gitconfig-project-1

[user] email = [email protected] [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 ключами.

0
Комментарии
-3 комментариев
Раскрывать всегда