.gitignore
какие файлы Git должен игнорировать
Что это
.gitignore — текстовый файл в корне (или в подпапке) Git-репозитория, который перечисляет паттерны файлов и папок, которые не должны попадать в репозиторий. Одна из самых важных вещей в проекте — без него в репу попадают билды, кэши, ключи, IDE-файлы и другой мусор.
Синтаксис
# комментарии начинаются с #
# точные имена
secret.key
config.local.json
# паттерны с шаблоном (glob)
*.log # все .log файлы
*.tmp
build/ # папка build/ везде
/build/ # только в корне
**/logs/ # папка logs на любом уровне
# отрицание — оставить, даже если попадает в другой паттерн
*.log
!important.log
# пустая строка = разделитель
Что обычно игнорируют
- Билд-артефакты:
node_modules/,dist/,build/,target/,*.o,*.pyc,__pycache__/ - IDE-конфиги:
.vscode/,.idea/,*.swp,.DS_Store(macOS!) - Секреты:
.env,*.pem,*.key,credentials.json - Логи:
*.log,logs/ - Локальные настройки:
config.local.*,*.local
Шаблоны для разных проектов
Готовые шаблоны — репо github/gitignore: github.com/github/gitignore. Есть для Node, Python, Java, Go, Rust, C++, Unity, Godot, VS Code и десятков других.
Пример для Node.js:
node_modules/
npm-debug.log*
yarn-debug.log*
.env
.env.local
dist/
build/
.DS_Store
.vscode/*
!.vscode/settings.json
Уровни игнорирования
- .gitignore в репозитории — коммитится, общий для всех
- .git/info/exclude — локальный, не коммитится
- ~/.gitignore_global — глобальный для юзера. Настраивается:
git config --global core.excludesfile ~/.gitignore_global. Идеально для.DS_Store, IDE-файлов
Что если файл уже закоммичен?
.gitignore не действует на уже отслеживаемые файлы. Нужно принудительно удалить из индекса:
git rm --cached secret.key
git commit -m "remove secret.key, now ignored"
Внимание: если засветил секрет — его нужно отозвать. Он останется в истории даже после удаления из последнего коммита.
Полезные утилиты
- gitignore.io (сейчас toptal.com/developers/gitignore) — генератор по стеку
- git check-ignore — проверить, попадает ли файл под правило:
git check-ignore -v file.log