Тур по Git
Продвинутый Git / Урок 5.5

Продвинутые шаблоны .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"