Play ITЗагрузка интерактивного демо…
Файл .gitignore
.gitignore — текстовый файл в корне (или в подпапках) репозитория Git. В нём перечисляют файлы и каталоги, которые не нужно хранить в истории версий — секреты, кэш, сборки, локальные настройки IDE.
Без .gitignore репозиторий быстро превращается в свалку — гигабайты node_modules, случайно закоммиченные пароли, конфликты из‑за личных настроек редактора. Для начинающего разработчика умение составить .gitignore — такой же базовый навык, как git init и первый коммит.
См. также: как работать с Git, рекомендации для команды, безопасность .env, README проекта. Перед первым push — шаблон .gitignore в лаборатории и сценарий заливки на GitHub.
Содержание
- Зачем нужен .gitignore
- Где создавать файл
- Как Git применяет правила
- Синтаксис и правила
- Что ОБЯЗАТЕЛЬНО игнорировать
- Шаблон .env.example
- Файл уже попал в Git
- Отладка: git check-ignore
- Универсальный базовый шаблон
- Шаблоны по языкам и стекам
- Готовые шаблоны из интернета
- Типичные ошибки
- Работа в команде
- Чек-лист перед первым push
.gitignore - файлы вне истории Git
Git отслеживает изменения файлов. Но не каждый файл — часть проекта:
| Категория | Примеры | Почему не в Git |
|---|---|---|
| Секреты | .env, *.pem, credentials.json | Утечка = взлом, штрафы, увольнение |
| Зависимости | node_modules/, vendor/ | Восстанавливаются из lock-файла |
| Сборка | dist/, build/, *.exe | Генерируются заново на CI и у коллег |
| Кэш и логи | *.log, .pytest_cache/ | Шум, конфликты, лишний размер |
| IDE и ОС | .idea/, .vscode/settings.json, Thumbs.db | У каждого разработчика свои |
Секрет, попавший в Git один раз, остаётся в истории навсегда — даже после удаления файла. Пароли нужно ротировать, а не только добавлять строку в .gitignore.
Где создавать файл
| Расположение | Когда использовать |
|---|---|
Корень репозитория .gitignore | Стандарт для 99% проектов |
Подпапка frontend/.gitignore | Монорепо: разные правила для разных частей |
Глобальный ~/.gitignore_global | Личные файлы ОС/IDE на всех проектах |
Локальный .git/info/exclude | Только ваш клон, не для команды |
Создание в корне:
cd my-project
touch .gitignore # Linux/macOS
# или New-Item .gitignore # PowerShell
git add .gitignore
git commit -m "Добавить .gitignore"
Глобальный ignore (опционально):
git config --global core.excludesfile ~/.gitignore_global
Пример ~/.gitignore_global:
# Личное — не для репозитория команды
.DS_Store
Thumbs.db
Desktop.ini
*.swp
*~
Как Git применяет правила
- Git читает
.gitignoreот корня репозитория и из каждой родительской папки до текущего файла. - Правило из более глубокой папки не отменяет правило выше — они складываются.
- Если файл уже отслеживается (был закоммичен раньше),
.gitignoreна него не действует, пока вы не уберёте его из индекса. - Пустые строки и строки, начинающиеся с
#, — комментарии.
Синтаксис и правила
Каждая непустая строка — один паттерн. Git использует упрощённые glob-правила (не полноценные regex).
Базовые элементы
| Символ / конструкция | Значение | Пример | Совпадёт | Не совпадёт |
|---|---|---|---|---|
* | Любая строка в сегменте пути | *.log | app.log, logs/error.log | logs (это папка) |
? | Один любой символ | file?.txt | file1.txt | file12.txt |
[abc] | Один символ из набора | file[12].txt | file1.txt | file3.txt |
/ в начале | Только от корня репозитория | /build | build/ в корне | src/build/ |
/ в конце | Только каталог | logs/ | папка logs | файл logs |
** | Любая вложенность каталогов | **/temp/ | a/temp/, a/b/c/temp/ | — |
! в начале | Исключение (не игнорировать) | см. ниже | — | — |
# | Комментарий | # секреты | — | — |
\ | Экранирование спецсимвола | \#file | файл #file | — |
Примеры паттернов
Код ITЗагрузка примера кода…
Правило "отмены" (!)
Порядок строк важен. Сначала широкое правило, потом узкое исключение:
# Игнорировать все файлы в static/
static/*
# Но отслеживать важный placeholder
!static/.gitkeep
Если родительская папка полностью игнорируется, "раскрыть" файл внутри неё иногда нельзя — Git не заходит в проигнорированный каталог. Тогда игнорируют содержимое через static/*, а не static/.
Пробелы и спецсимволы
- Пробел в имени файла: экранируйте
\или оберните в кавычки в shell; в.gitignore—\. - Имена с
#: начните строку с\#.
Что ОБЯЗАТЕЛЬНО игнорировать
1. Секреты и ключи
Код ITЗагрузка примера кода…
В репозиторий кладут .env.example с именами переменных без значений. Подробнее — в разделе ниже и в статье про безопасность .env.
2. Зависимости (восстанавливаются менеджером пакетов)
node_modules/
vendor/ # PHP Composer
bower_components/
.pnpm-store/
3. Артефакты сборки
dist/
build/
out/
target/ # Java Maven/Gradle
bin/
obj/ # .NET
*.o
*.exe
*.dll
*.so
*.dylib
4. Кэш, временные и лог-файлы
*.log
*.tmp
*.temp
.cache/
.turbo/
.parcel-cache/
coverage/
.nyc_output/
htmlcov/
.pytest_cache/
.mypy_cache/
.ruff_cache/
5. Файлы операционной системы
.DS_Store
.AppleDouble
Thumbs.db
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/
6. Настройки IDE (спорно — см. команду)
Часто игнорируют личные настройки, но коммитят общие для команды:
# Обычно игнорируют целиком
.idea/
*.sublime-workspace
# VS Code — личное — игнор, общее — в Git
.vscode/*
!.vscode/extensions.json
!.vscode/launch.json
!.vscode/tasks.json
Шаблон .env.example
Файл не игнорируется — он в репозитории и показывает, какие переменные нужны:
# .env.example — коммитим в Git
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
API_KEY=
JWT_SECRET=
DEBUG=true
Разработчик копирует локально:
cp .env.example .env
---
## Файл уже попал в Git
`.gitignore` **не удаляет** уже отслеживаемые файлы.
```bash
# Убрать из индекса, оставить на диске
git rm --cached .env
git rm --cached -r node_modules/
git add .gitignore
git commit -m "Перестать отслеживать .env и node_modules"
Если секрет уже ушёл на сервер — смените пароль/ключ и при необходимости используйте git filter-repo или поддержку платформы (GitHub Secret Scanning).
Отладка — git check-ignore
Проверить, почему файл игнорируется:
git check-ignore -v node_modules/lodash/index.js
# .gitignore:42:node_modules/ node_modules/lodash/index.js
Показать статус всех файлов:
git status --ignored
Универсальный базовый шаблон
Подойдёт как старт для любого проекта — дополните блоком под свой язык:
Код ITЗагрузка примера кода…
Шаблоны по языкам и стекам
Node.js / JavaScript / TypeScript
Код ITЗагрузка примера кода…
Python
Код ITЗагрузка примера кода…
Java / Kotlin (Maven и Gradle)
Maven:
Код ITЗагрузка примера кода…
Gradle:
.gradle/
build/
!gradle/wrapper/gradle-wrapper.jar
*.class
local.properties
.idea/
*.iml
C# / .NET
Код ITЗагрузка примера кода…
Go
Код ITЗагрузка примера кода…
Rust
/target/
**/*.rs.bk
Cargo.lock # для библиотек часто коммитят; для приложений — всегда
.env
.env.*
!.env.example
PHP (Composer)
Код ITЗагрузка примера кода…
Ruby
Код ITЗагрузка примера кода…
Flutter / Dart
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
build/
coverage/
*.iml
.idea/
.env
Android
Код ITЗагрузка примера кода…
iOS / Xcode
Код ITЗагрузка примера кода…
Docker (дополнение к основному стеку)
docker-compose.override.yml # локальные порты и секреты
.env
.env.*
!.env.example
Готовые шаблоны из интернета
| Ресурс | Назначение |
|---|---|
| github.com/github/gitignore | Официальные шаблоны GitHub по языкам и IDE |
| gitignore.io | Генератор: выбираете OS + IDE + язык |
Шаблон при git init на GitHub/GitLab | Чекбокс "Add .gitignore" при создании репо |
При создании репозитория на GitHub можно сразу выбрать шаблон .gitignore — удобно для первого проекта.
Типичные ошибки
| Ошибка | Последствие | Решение |
|---|---|---|
Добавили в .gitignore после git add | Файл всё ещё в Git | git rm --cached <file> |
Закоммитили .env "на минутку" | Секрет в истории | Ротация ключей + удаление из истории |
Игнорируют package-lock.json / poetry.lock | У коллег другие версии пакетов | Коммитить lock-файлы |
Игнорируют весь .vscode/ | У команды разный формат | Коммитить extensions.json, игнорировать settings.json |
Копируют чужой .gitignore без чтения | Пропуск нужных правил или лишние | Адаптировать под проект |
Паттерн build без / | Может зацепить src/build/ как файл | Использовать /build/ для корня |
Работа в команде
- Один
.gitignoreв корне — источник правды; изменения через pull request. - Не дублируйте одни и те же строки в десяти местах без причины.
- Документируйте неочевидное комментарием:
# локальный override Docker, см. README. - Pre-commit hooks (
gitleaks,detect-secrets) — дополнение, не замена.gitignore. - Новый участник:
git clone→ скопировать.env.example→cp .env.example .env.
Чек-лист перед первым push
-
.gitignoreсоздан в корне репозитория - Секреты (
.env, ключи) не вgit status - Зависимости (
node_modules,venv) не отслеживаются - Артефакты сборки (
dist,target,bin/obj) игнорируются - Lock-файлы (
package-lock.json,Cargo.lockдля app) закоммичены - Есть
.env.exampleбез реальных паролей -
git check-ignore -vпроверен для спорных путей - Команда знает, что делать, если секрет всё же утёк
Дальше: README проекта · безопасность окружения · шпаргалка Git