Личные правила игнорирования в .git/info/exclude
Как записать в .git/info/exclude личные правила игнорирования, действующие только в одном репозитории, не меняя .gitignore, — когда это удобно и какой у них приоритет.
.gitignore коммитится и становится общим для всех. Но иногда есть файлы, которые только вы хотите игнорировать в этом репозитории: личные заметки, экспериментальные скрипты, папки, которые создаёт плагин вашего редактора. Для этого служит .git/info/exclude.
Где он находится
При git init или git clone файл .git/info/exclude создаётся автоматически. Это пустой файл с несколькими строками комментариев.
cat .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# ...
Поскольку он лежит в каталоге .git, он не коммитится и не передаётся другим при push. Синтаксис полностью совпадает с .gitignore. Если нужно узнать точное расположение, в том числе при нескольких рабочих деревьях (worktree), используйте git rev-parse --git-path info/exclude.
Когда использовать
| Ситуация | Примеры | Рекомендуемое место |
|---|---|---|
| Личные файлы только для этого репозитория | notes.md, scratch/, todo.txt | .git/info/exclude |
| Личные файлы, общие для всех репозиториев | .DS_Store, *.swp | глобальный gitignore |
| Правила, нужные всей команде | node_modules/, dist/, .env | .gitignore |
Особенно это полезно, когда вы вносите вклад в чужой репозиторий. Если править .gitignore проекта, чтобы скрыть файлы своих инструментов, ревьюеры могут не захотеть такого изменения. Запись в .git/info/exclude не затрагивает историю коммитов.
echo 'scratch/' >> .git/info/exclude
echo '.my-plugin-cache/' >> .git/info/exclude
git status # больше не отображаются
Приоритет
Среди источников правил .git/info/exclude стоит ниже .gitignore и выше глобального файла.
- Шаблоны из командной строки
.gitignore(файлы в подкаталогах перекрывают вышестоящие).git/info/excludecore.excludesFile
Поэтому файл, игнорируемый .gitignore, нельзя вернуть правилом ! в .git/info/exclude. Проверка на практике выглядит так.
# .gitignore : x
# .git/info/exclude : !x
$ git check-ignore -v x
.gitignore:1:x x
На что обратить внимание
- На уже отслеживаемые файлы он не действует. Как и в .gitignore, правила игнорирования применяются только к неотслеживаемым файлам.
- При новом клонировании файл возвращается в исходное состояние. Если одни и те же правила нужны на нескольких компьютерах, лучше использовать глобальный gitignore.
- Если репозиторий копируют в общую папку вместе с каталогом
.git, правила переносятся вместе с ним.
Источники
- Официальная документация gitignore: $GIT_DIR/info/exclude
- GitHub Docs: Excluding local files without creating a .gitignore file
- Дата проверки: 2026-09-23 (пример приоритета проверен в git 2.50.1)