Добавить объявление

.gitignore - не единственный способ заставить Git игнорировать файлы

Большинство разработчиков знают про .gitignore. Файл в корне проекта, куда складывают node_modules, .env, логи и прочий мусор, который не должен попасть в репозиторий. Но Git умеет игнорировать файлы не только с помощью .gitignore. Есть еще два уровня и каждый решает свою задачу.

Три уровня игнорирования:


  • Первый уровень - .gitignore. Это классика. Файл лежит в репозитории, попадает под контроль версий и работает у всех, кто клонирует проект. Сюда пишут все, что относится к проекту целиком: зависимости, артефакты сборки, локальные конфиги IDE.

  • Второй уровень - .git/info/exclude. Файл внутри директории .git. Он работает так же, как .gitignore, но не попадает в коммиты. Это место для личных правил, которые нужны только вам: черновики, заметки, экспериментальные скрипты.

  • Третий уровень - ~/.config/git/ignore. Глобальный файл для всех репозиториев на вашей машине. Сюда добавляют то, что мешает везде. Например, на macOS это .DS_Store. На Windows - Thumbs.db. Настройка делается один раз и забывается.

Когда что использовать:


  • .gitignore - для командных правил. Если файл должен игнорироваться у всех, кто работает над проектом, он идет сюда.

  • .git/info/exclude - для личных правил внутри одного репозитория. У вас есть файл notes.txt с пометками для себя. Добавлять его в .gitignore не хочется - коллегам он не нужен. В exclude он не отслеживается только у вас.

  • ~/.config/git/ignore - для системных файлов. .DS_Store, Thumbs.db, .swp - все, что создается автоматически и раздражает в каждом проекте.

Как проверить, кто именно игнорирует файл:


Когда правил много, легко запутаться. Git дает команду git check-ignore -v, которая показывает, какой именно файл игнорирует конкретный файл.

$ git check-ignore -v .DS_Store
/Users/user/.config/git/ignore:2:.DS_Store .DS_Store

Если файл игнорируется .gitignore, вывод начнется с .gitignore. Если exclude - с .git/info/exclude. Если глобальным ignore - с путем в домашней директории. Если команда ничего не выводит - файл никто не игнорирует.

Как переопределить глобальный файл:


Путь к глобальному файлу можно изменить. Например, использовать .gitignore_global в домашней директории.

git config --global core.excludesFile ~/.gitignore_global

Вернуть стандартное поведение:

git config --global --unset core.excludesFile

Важный нюанс:


Если файл уже попал в коммит, добавить его в .gitignore недостаточно. Git продолжит его отслеживать. Сначала нужно удалить его из индекса.

git rm --cached filename

После этого локальная копия останется на диске, но Git перестанет ее отслеживать.

Вывод:


Git дает три уровня игнорирования и каждый решает свою задачу. .gitignore - для командных правил. .git/info/exclude - для личных исключений в одном репозитории. ~/.config/git/ignore - для глобальной чистоты на всей машине.

Разделение уровней помогает не засорять общие правила личными исключениями и не тащить в коммиты то, что нужно только вам. Правильный выбор уровня избавляет команду от конфликтов и лишних правок .gitignore.
16.07.2026 46 601