← Назад к вопросам

Зачем нужен файл .gitignore?

1.0 Junior🔥 241 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

.gitignore: назначение, структура и best practices

Что такое .gitignore

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

Зачем нужен .gitignore

Без .gitignore репозиторий будет содержать:

1. Секреты и пароли (КРИТИЧНО)

❌ Плохо:
.env файл с реальными пароли в репозитории
DB_PASSWORD=SecurePassword123
API_KEY=sk-abc123def456
JWT_SECRET=my-secret-key

Риск: кто угодно может скачать репозиторий и получить доступ к БД
✅ Хорошо:
.env в .gitignore
.env.example в репозитории (без реальных значений)
DB_PASSWORD=change_me
API_KEY=change_me
JWT_SECRET=change_me

2. Сгенерированные файлы

Особенно в Java:

Java целевые файлы:
✗ target/              → Скомпилированные .class файлы
✗ *.class              → Class файлы
✗ .classpath           → Eclipse конфиг
✗ .project             → IDE конфиг

Gradle/Maven:
✗ build/               → Результаты сборки
✗ .gradle/             → Gradle кэш
✗ .m2/                 → Maven репозиторий

IDE:
✗ .idea/               → IntelliJ IDEA конфиг
✗ .vscode/             → VS Code конфиг
✗ *.swp, *.swo         → Vim swap файлы

3. Зависимости

✗ node_modules/        → NPM пакеты (для frontend)
✗ .gradle/             → Gradle кэш
✗ vendor/              → Composer зависимости (PHP)
✗ venv/, env/          → Virtual environments (Python)

Почему?
- Занимают десятки МБ/ГБ
- Зависят от платформы (OS-specific)
- Легко восстанавливаются через pom.xml, package.json, etc.

4. Локальные конфиги

✗ application-local.yml     → Локальная конфигурация разработчика
✗ .env.local                → Локальные переменные окружения
✗ config.local.js           → Локальная конфигурация
✗ *.properties (локальные)  → IDE-специфичные настройки

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

# Компилированные файлы
*.class
*.jar
*.war
*.ear
*.zip
*.tar.gz

# IDE
.idea/
.vscode/
*.swp
*.swo
*~
.DS_Store

# Build директории
target/
build/
.gradle/
.m2/

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

# Локальные конфиги
.env
.env.local
application-local.yml
config.properties

# IDE
*.iml
.classpath
.project
.settings/

# Git
.git/
.gitignore

Практический пример для Java приложения

# Проект структура
my-java-app/
├── src/                    ← Исходный код (нужен в git)
├── pom.xml                 ← Зависимости (нужен в git)
├── target/                 ← Скомпилированные файлы (.gitignore)
│   ├── classes/
│   ├── my-app-1.0.jar
│   └── ...
├── .idea/                  ← IDE конфиг (.gitignore)
│   ├── workspace.xml
│   └── ...
└── .env                    ← Секреты (.gitignore)
    └── DB_PASSWORD=secret

# Файл .gitignore
target/
.idea/
.env
*.class
*.jar

Правила синтаксиса .gitignore

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

# Конкретный файл
application.properties

# Папка (с слэшом в конце)
target/

# Паттерн с *
*.class
*.jar
*.log

# Паттерн с ?
*.?xml    # Совпадает: test.xml, pom.xml

# Паттерн с **
build/**/*.class    # Все .class в build и подпапках

# Отрицание (!) — исключение
!important.jar      # Этот jar файл НЕ игнорируем
!src/main/resources/application.yml

Реальный пример: Spring Boot приложение

# Maven
target/
pom.xml.tag
pom.xml.releaseBackup

# Gradle
build/
.gradle

# IDE
.idea/
*.iml
.classpath
.project
.settings/
*.swp
*.swo
*~
.DS_Store

# Environment
.env
.env.local
local.properties

# Logs
logs/
*.log
*.log.*

# Spring Boot
application-local.yml
application-dev.properties

# OS
.DS_Store
Thumbs.db

# IDE specific
vscode/
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

Важные правила при работе с .gitignore

Правило 1: .gitignore в репозитории

# .gitignore ДОЛЖЕН быть в git (чтобы все разработчики использовали одно)
git add .gitignore
git commit -m "Add .gitignore"

# ❌ Неправильно
echo ".gitignore" >> .gitignore  # Игнорируешь сам .gitignore — плохо!

Правило 2: Если файл уже закоммичен

# Если случайно закоммитил .env:
git rm --cached .env          # Удаляешь из git
echo ".env" >> .gitignore     # Добавляешь в .gitignore
git commit -m "Remove .env from git"

# Теперь .env больше не будет отслеживаться

Правило 3: Проверка что игнорируется

# Показывает игнорируемые файлы
git status --ignored

# Показивает почему файл игнорируется
git check-ignore -v .env
# Output: .gitignore:8:.env

Таблица: что игнорировать в Java проектах

Файлы/ПапкиДолжны быть в .gitignoreПричина
target/✅ ДАСгенерированные файлы
.idea/✅ ДАIDE конфиг (специфичен для разработчика)
.env✅ ДАСекреты и пароли
src/❌ НЕТИсходный код нужен
pom.xml❌ НЕТЗависимости нужны всем
README.md❌ НЕТДокументация нужна
logs/✅ ДАЛокальные логи
*.class✅ ДАСкомпилированные файлы
.env.example❌ НЕТШаблон для разработчиков

Вывод

.gitignore нужен для:

  1. Безопасности — скрывает пароли и токены
  2. Чистоты репозитория — без сгенерированного мусора
  3. Производительности — меньше файлов = быстрее git операции
  4. Консистентности — все разработчики используют одни правила
  5. Меньше конфликтов — нет IDE-специфичных файлов

Золотое правило: если файл можно восстановить (скомпилировать, скачать) — его в .gitignore. Если файл критичен для проекта — он в git.

Зачем нужен файл .gitignore? | PrepBro