Gymterview
junior

Что такое .gitignore и как его правильно настроить?

.gitignore — это файл конфигурации Git, в котором указываются шаблоны (patterns) файлов и директорий, которые Git должен игнорировать и не включать в систему контроля версий.

Синтаксис шаблонов

Пример
# Комментарий

# Игнорировать конкретный файл
secret.properties

# Игнорировать все файлы с расширением
*.class
*.jar
*.log

# Игнорировать директорию
target/
build/
out/

# Игнорировать файлы в любой вложенной директории
**/logs/

# Отрицание — НЕ игнорировать файл (исключение из правила)
!important.log

# Игнорировать файл только в корне репозитория
/config.properties

# Wildcard — один символ
?.txt

# Игнорировать все в директории, кроме определённого файла
logs/*
!logs/.gitkeep

Типичный .gitignore для Java-проекта

Развернуть пример .gitignore
# Compiled class files
*.class

# Build directories
target/
build/
out/

# IDE — IntelliJ IDEA
.idea/
*.iml

# IDE — Eclipse
.classpath
.project
.settings/

# IDE — VS Code
.vscode/

# Maven
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next

# Gradle
.gradle/
gradle-app.setting
!gradle-wrapper.jar

# Logs
*.log

# OS files
.DS_Store
Thumbs.db

# Environment and secrets
.env
*.properties.local
application-local.yml

# Package files
*.war
*.ear

Глобальный .gitignore

Пример
# Создать глобальный файл игнорирования (для всех репозиториев)
git config --global core.excludesfile ~/.gitignore_global

# Содержимое ~/.gitignore_global (для IDE и OS):
# .idea/
# .DS_Store
# Thumbs.db
# *.swp

Игнорирование уже отслеживаемого файла

Пример
# Если файл уже был закоммичен, .gitignore на него не действует
# Нужно удалить из отслеживания:
git rm --cached src/main/resources/secret.properties
# Файл останется на диске, но перестанет отслеживаться

# Для директории:
git rm -r --cached target/

Ключевые моменты

  • .gitignore работает только для неотслеживаемых файлов. Если файл уже добавлен в Git, его нужно удалить через git rm --cached
  • Файл .gitignore размещается в корне репозитория, но может быть и в поддиректориях (действует на эту директорию и ниже)
  • Для IDE-специфичных файлов лучше использовать глобальный .gitignore, а не добавлять их в проектный
  • Пустые директории не отслеживаются Git — для сохранения структуры добавляют файл-заглушку .gitkeep

Частые ошибки

  • Забыть добавить .gitignore в начале проекта — потом приходится удалять файлы из отслеживания
  • Коммитить секреты (.env, ключи, пароли) — даже после удаления файла он остаётся в истории Git
  • Забывать про git rm --cached — добавление в .gitignore уже отслеживаемого файла не имеет эффекта
  • Игнорировать gradle-wrapper.jar — он должен быть в репозитории для сборки без установленного Gradle

Как используется в 2026

  • GitHub/GitLab предлагают готовые шаблоны .gitignore при создании репозитория (Java, Maven, Gradle и т.д.)
  • Сервис gitignore.io генерирует .gitignore по набору технологий
  • Инструменты Secret Scanning в GitHub/GitLab автоматически обнаруживают случайно закоммиченные секреты
  • git-secrets и pre-commit хуки предотвращают коммит секретов

На собеседовании: ключевой момент, который часто упускают: .gitignore не действует на уже отслеживаемые файлы — нужен git rm --cached. Покажите знание синтаксиса: *, **, ! (отрицание), / (только корень). Упомяните разницу между глобальным и проектным .gitignore.