Продвинутые шаблоны .gitignore
Вы уже использовали базовые правила .gitignore. Теперь давайте освоим синтаксис шаблонов для точного контроля над тем, какие файлы отслеживает Git.
Синтаксис шаблонов
Простые шаблоны
*.log # игнорировать все файлы .log
debug.log # игнорировать конкретный файл
build/ # игнорировать директорию build
Директория и файл
Завершающий слеш означает «только директория»:
logs # игнорирует файлы И директории с именем "logs"
logs/ # игнорирует только директорию с именем "logs"
Подстановочные знаки
* # совпадает со всем, кроме /
** # совпадает со всем, включая /
? # совпадает с любым одиночным символом
[abc] # совпадает с a, b или c
[0-9] # совпадает с любой цифрой
Двойная звёздочка
Шаблон ** мощен для совпадения между директориями:
**/logs # директория logs в любом месте дерева
**/logs/*.log # файлы .log внутри любой директории logs
src/**/*.test # файлы .test в любом месте под src/
Шаблоны отрицания
Используйте ! для отмены игнорирования файла:
*.log # игнорировать все файлы логов
!important.log # но сохранить этот
Порядок важен. Шаблоны обрабатываются сверху вниз. Более поздний шаблон переопределяет более ранний.
build/ # игнорировать всё в build/
!build/.keep # это НЕ сработает — родительская директория игнорируется
Чтобы сохранить файл внутри игнорируемой директории, сначала нужно отменить игнорирование директории:
build/* # игнорировать содержимое build (не саму директорию)
!build/.keep # теперь это работает
Типовые шаблоны
Node.js / JavaScript
node_modules/
dist/
.env
.env.local
*.log
coverage/
Python
__pycache__/
*.pyc
.venv/
*.egg-info/
dist/
.env
Java / Kotlin
*.class
target/
build/
.gradle/
*.jar
Общие
# Файлы ОС
.DS_Store
Thumbs.db
# Файлы редактора
.vscode/
.idea/
*.swp
*~
# Окружение
.env
.env.local
Глобальный .gitignore
Вы можете установить глобальный файл игнорирования для шаблонов, которые применяются ко всем вашим репозиториям:
git config --global core.excludesFile ~/.gitignore_global
Поместите сюда шаблоны ОС и редактора, чтобы не повторять их в каждом проекте.
Проверка правил игнорирования
Используйте git check-ignore для отладки того, какое правило игнорирует файл:
git check-ignore -v debug.log
# .gitignore:1:*.log debug.log
Флаг -v показывает, какой файл и номер строки совпали.
Уже отслеживаемые файлы
Добавление файла в .gitignore не прекращает его отслеживание, если он уже был закоммичен. Сначала нужно удалить его из индекса:
git rm --cached secret.env # прекратить отслеживание, но сохранить файл
git commit -m "Stop tracking secret.env"