Перейти к основному содержимому

Play ITЗагрузка интерактивного демо…

Файл .gitignore

Разработчику Инженеру

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

Без .gitignore репозиторий быстро превращается в свалку — гигабайты node_modules, случайно закоммиченные пароли, конфликты из‑за личных настроек редактора. Для начинающего разработчика умение составить .gitignore — такой же базовый навык, как git init и первый коммит.

См. также: как работать с Git, рекомендации для команды, безопасность .env, README проекта. Перед первым pushшаблон .gitignore в лаборатории и сценарий заливки на GitHub.


Содержание


.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 применяет правила

  1. Git читает .gitignore от корня репозитория и из каждой родительской папки до текущего файла.
  2. Правило из более глубокой папки не отменяет правило выше — они складываются.
  3. Если файл уже отслеживается (был закоммичен раньше), .gitignore на него не действует, пока вы не уберёте его из индекса.
  4. Пустые строки и строки, начинающиеся с #, — комментарии.

Синтаксис и правила

Каждая непустая строка — один паттерн. Git использует упрощённые glob-правила (не полноценные regex).


Базовые элементы

Символ / конструкцияЗначениеПримерСовпадётНе совпадёт
*Любая строка в сегменте пути*.logapp.log, logs/error.loglogs (это папка)
?Один любой символfile?.txtfile1.txtfile12.txt
[abc]Один символ из набораfile[12].txtfile1.txtfile3.txt
/ в началеТолько от корня репозитория/buildbuild/ в корне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Файл всё ещё в Gitgit rm --cached <file>
Закоммитили .env "на минутку"Секрет в историиРотация ключей + удаление из истории
Игнорируют package-lock.json / poetry.lockУ коллег другие версии пакетовКоммитить lock-файлы
Игнорируют весь .vscode/У команды разный форматКоммитить extensions.json, игнорировать settings.json
Копируют чужой .gitignore без чтенияПропуск нужных правил или лишниеАдаптировать под проект
Паттерн build без /Может зацепить src/build/ как файлИспользовать /build/ для корня

Работа в команде

  1. Один .gitignore в корне — источник правды; изменения через pull request.
  2. Не дублируйте одни и те же строки в десяти местах без причины.
  3. Документируйте неочевидное комментарием: # локальный override Docker, см. README.
  4. Pre-commit hooks (gitleaks, detect-secrets) — дополнение, не замена .gitignore.
  5. Новый участник: git clone → скопировать .env.examplecp .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