git add и .gitignore: управляем индексом

Добавляем нужное в индекс и навсегда прячем от git мусорные файлы.

git add — наполняем индекс

Команда git add переносит изменения из рабочей директории в индекс. Варианты:

git add app.py          # один конкретный файл
git add src/            # всю папку
git add .               # все изменения в текущей папке и ниже
git add -A              # вообще все изменения в репозитории

Важно понять: git add фиксирует текущее состояние файла. Если после git add вы снова отредактируете файл, новые правки в индекс не попадут — нужно сделать git add ещё раз.

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

В проекте всегда есть файлы, которым не место в репозитории: скомпилированные артефакты, зависимости, логи, секреты, временные файлы редактора. Их не нужно ни хранить, ни видеть в git status. Для этого создают файл .gitignore в корне проекта и перечисляют в нём шаблоны игнорируемых путей.

.gitignore — текстовый файл со списком шаблонов; всё, что под них подходит, git не отслеживает и не предлагает добавить.

Синтаксис .gitignore

Пример типичного файла для Python-проекта:

# комментарий начинается с решётки
*.log              # все файлы с расширением .log
__pycache__/       # папка и всё её содержимое
node_modules/      # зависимости npm
.env               # файл с секретами
build/             # папка сборки
!keep.log          # исключение: этот .log НЕ игнорировать

Основные правила:

  • * — любое количество символов в имени.
  • Слеш в конце (dir/) означает «папка».
  • Восклицательный знак (!) — исключение из правила выше.

Частая ошибка: файл уже отслеживается

Если вы добавили файл в .gitignore, а git его всё равно показывает — скорее всего, файл уже попал под контроль раньше. .gitignore действует только на untracked-файлы. Уберите файл из индекса, оставив его на диске:

git rm --cached secret.env

Вывод:

rm 'secret.env'

После этого коммита файл перестанет отслеживаться, а .gitignore начнёт работать. Сам файл с диска не удалится — за это отвечает флаг --cached.

Шаблоны .gitignore не нужно писать с нуля

Для популярных языков и инструментов есть готовые наборы правил .gitignore. При создании репозитория на GitHub можно выбрать шаблон из списка (Python, Node, Java и т. д.), и нужный .gitignore появится автоматически. Есть и отдельный проект github/gitignore с десятками готовых файлов. Это экономит время и избавляет от типичных промахов вроде закоммиченной папки node_modules на сотни мегабайт.

Что особенно важно не коммитить

Главное правило безопасности: в репозиторий не должны попадать секреты — пароли, токены, ключи API, файлы .env. Если секрет уже попал в коммит и был запушен, недостаточно просто удалить файл новым коммитом: он останется в истории, и его смогут достать. Поэтому секреты с самого начала добавляют в .gitignore, а в репозитории хранят лишь пример вроде .env.example без реальных значений.

Итог

  • git add фиксирует текущее состояние файла в индексе; после новых правок нужен повторный add.
  • .gitignore исключает мусор, зависимости и секреты из репозитория.
  • .gitignore не влияет на уже отслеживаемые файлы — их нужно убрать через git rm --cached.
Проверьте себя
1. Вы сделали git add file.txt, а затем снова отредактировали file.txt. Что в индексе?
AНовые изменения — git отслеживает файл автоматически
BСостояние на момент git add; новые правки в индекс не попали
CФайл удалён из индекса
DВозникнет ошибка
2. Для чего нужен файл .gitignore?
AЧтобы ускорить коммиты
BЧтобы git не отслеживал перечисленные файлы и папки
CЧтобы хранить список авторов проекта
DЧтобы задать имя ветки по умолчанию
3. Файл уже отслеживается git, добавление его в .gitignore не помогает. Что сделать?
AПерезапустить компьютер
BУдалить файл с диска
CУбрать файл из индекса командой git rm --cached, затем закоммитить
DНичего, .gitignore работает только на новые проекты
Поддержать проект