guide

Личные правила игнорирования в .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 и выше глобального файла.

  1. Шаблоны из командной строки
  2. .gitignore (файлы в подкаталогах перекрывают вышестоящие)
  3. .git/info/exclude
  4. core.excludesFile

Поэтому файл, игнорируемый .gitignore, нельзя вернуть правилом ! в .git/info/exclude. Проверка на практике выглядит так.

# .gitignore        : x
# .git/info/exclude : !x
$ git check-ignore -v x
.gitignore:1:x	x

На что обратить внимание

Источники

← НазадНастройка глобального gitignore (core.excludesFile)