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.