Большинство разработчиков знают про .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 - с путем в домашней директории. Если команда ничего не выводит - файл никто не игнорирует.
🔗 Читать подробнее
💡 Вывод:
Git дает три уровня игнорирования и каждый решает свою задачу. .gitignore - для командных правил. .git/info/exclude - для личных исключений в одном репозитории. ~/.config/git/ignore - для глобальной чистоты на всей машине.
Разделение уровней помогает не засорять общие правила личными исключениями и не тащить в коммиты то, что нужно только вам. Правильный выбор уровня избавляет команду от конфликтов и лишних правок .gitignore.
Подписаться на канал:
➡️ Кот Денисова