guide

Что игнорировать, а что коммитить

Критерии: игнорировать артефакты сборки, зависимости, кэши и секреты, но коммитить lockfile, примеры конфигурации и согласованные настройки редактора; а также .gitignore в подкаталогах, сохранение пустых каталогов и советы по объединению шаблонов.

Хороший .gitignore оценивают не по длине, а по критерию. Критерий один: может ли человек, заново клонировавший репозиторий, получить тот же результат только из исходников и настроек? То, что можно воссоздать, игнорируется; то, что воссоздать нельзя или что фиксирует результат, коммитится.

Что игнорировать

ВидПримерыПричина
Артефакты сборкиdist/, build/, target/, *.o, *.classзаново собираются из исходников
Установленные зависимостиnode_modules/, vendor/ (PHP), .venv/заново устанавливаются по манифесту и lockfile
Кэши и логи.cache/, .pytest_cache/, *.log, coverage/меняются при каждом запуске
Локальное окружение и секреты.env, *.pem, local.properties, *.tfstateразличаются у разных людей и окружений или не должны утечь
Личное состояние инструментов.DS_Store, *.swp, .idea/workspace.xmlне относятся к проекту (рекомендуется глобальный gitignore)

Что коммитить

.gitignore в подкаталогах

.gitignore не обязательно держать только в корне. .gitignore в подкаталоге действует относительно этого каталога и имеет приоритет над вышестоящими файлами. Если пакетам в монорепозитории нужны разные правила, отдельные файлы в папках пакетов читать проще.

repo/
├── .gitignore          # общее: .DS_Store, .env, coverage/
├── apps/web/.gitignore # .next/, out/
└── services/api/.gitignore # target/

Сохранение пустых каталогов

git отслеживает только файлы и не хранит пустые каталоги. Если, как с папкой логов, папка должна существовать, а её содержимое — игнорироваться, положите в неё файл-метку и верните его отрицающим правилом.

/log/*
!/log/.keep

Имена .keep и .gitkeep — не официальная функция git, а лишь соглашение. Работает любое имя. Другой способ — положить в эту папку .gitignore со следующим содержимым: он игнорирует всё, кроме самого себя.

*
!.gitignore

При объединении шаблонов

Правила — короткие и конкретные

Слишком широкие правила вроде *.json поглощают и файлы настроек. По возможности сужайте путь (/dist/) и ставьте завершающий слеш у каталогов, чтобы отличать их от одноимённых файлов. Однострочный комментарий с причиной над правилом поможет следующему человеку решить, можно ли его удалить.

Источники

← НазадПочему файл игнорируется? Отладка с git check-ignore