Git читає конфігурацію з кількох файлів. Пізніший рівень перекриває раніший:
| Рівень | Файл | Прапорець |
|---|---|---|
| system | /etc/gitconfig (чи в каталозі встановлення) |
--system |
| global | ~/.gitconfig чи ~/.config/git/config |
--global |
| local | .git/config репозиторію |
--local (за замовчуванням) |
| worktree | .git/config.worktree |
--worktree |
| команда | git -c key=value ... |
- |
git config --global user.name "Olena Kovalenko"
git config user.email olena@company.com # лише цей репозиторій
git config --list --show-origin # усі значення і звідки вони
git config --show-origin --get user.email
--show-origin - перший інструмент, коли «налаштування не працює»: видно, який файл перекрив значення.
Умовні включення - різні налаштування для роботи й особистих проєктів:
# ~/.gitconfig
[user]
name = Olena Kovalenko
email = olena@personal.dev
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig-work
# ~/.gitconfig-work
[user]
email = olena@company.com
signingkey = ~/.ssh/work_ed25519.pub
Усі репозиторії в ~/work/ автоматично отримують робочу пошту - більше ніяких комітів з особистою адресою в корпоративному репозиторії.
Умови includeIf:
gitdir:- шлях до репозиторію (gitdir/i:- без урахування регістру);onbranch:- поточна гілка;hasconfig:remote.*.url:- адреса віддаленого репозиторію, наприклад усі репозиторії зgithub.com/company/**.
Що важливо:
- слеш у кінці
gitdir:~/work/означає «цей каталог і все всередині»; .git/configне комітиться і не поширюється через клон - спільні налаштування команди передаються інакше (документація, скрипт налаштування,.gitattributesі.editorconfigу репозиторії);- у CI змінні оточення
GIT_AUTHOR_NAME,GIT_COMMITTER_EMAILперекривають конфігурацію.