.gitignore - текстовый файл, обычно в корне репозитория. Каждая
строка - паттерн (glob-style). Файлы и директории, подходящие под
паттерн, Git игнорирует: они не показываются в git status и не
попадают в git add ..
Базовые правила синтаксиса
# Комментарии - со знаком #
*.log # все .log в любой директории
node_modules/ # директория целиком, в любом месте
/build # директория build только в корне репо
!important.log # отрицание: НЕ игнорировать этот файл
src/**/*.pyc # рекурсивный паттерн через **
Что обязательно в .gitignore
- Артефакты сборки:
dist/,build/,target/,*.o,*.pyc. - Зависимости:
node_modules/,.venv/,vendor/(если не вендорим явно). - IDE-файлы:
.vscode/,.idea/. - OS-мусор:
.DS_Store,Thumbs.db. - Секреты:
.env,*.pem,*.key,secrets.yaml,credentials/. - Логи и кэши:
*.log,.cache/,__pycache__/.
Особенно важна последняя категория - секреты. Раз попавший в коммит секрет считается утёкшим, даже если потом удалён (история Git показывает прежнее содержимое). Лечение - ротация ключа + переписывание истории через git-filter-repo.
Что .gitignore НЕ делает
- Не удаляет уже tracked файл. Если ты добавил
secrets.yamlв.gitignoreпосле того, как уже закоммитил его - Git продолжит его отслеживать. Нужноgit rm --cached secrets.yamlотдельно. - Не «защищает» от просмотра. Файл просто не виден Git'у; в диске он остаётся, и любой может его прочитать.
- Не действует через cache. Если ты
git add -f secrets.yaml(force), Git добавит несмотря на ignore.
Где может лежать gitignore
Несколько уровней:
- Per-repo:
.gitignoreв корне, коммитится. Обычно главное. - Per-directory:
.gitignoreвнутри подпапки, действует только на её содержимое. - Global (per-user):
~/.config/git/ignoreили путь вcore.excludesFile. Для личных предпочтений: твой IDE, твоя ОС. Не коммитится. - Local-only:
.git/info/exclude- игнор только для твоего клона, не шарится.
# Установить global gitignore
git config --global core.excludesFile ~/.gitignore_global
В ~/.gitignore_global обычно класть OS- и IDE-мусор: .DS_Store,
Thumbs.db, .vscode/, .idea/. Тогда .gitignore в проекте
чище - только проектные паттерны.
Стандартные шаблоны
Не пиши с нуля. На github.com/github/gitignore лежат шаблоны для
всех языков: Python.gitignore, Node.gitignore, Java.gitignore.
Скопировать в проект и допилить под нужды.
Если уже закоммитил что не надо
# Перестать tracking'ать файл, но оставить на диске
git rm --cached path/to/secret
# Добавить в .gitignore
echo "path/to/secret" >> .gitignore
# Закоммитить
git add .gitignore
git commit -m "stop tracking secret"
Это убирает файл из будущих коммитов. Но в истории он остался, и любой может его восстановить из старых коммитов. Если это настоящий секрет - нужно git-filter-repo и ротация ключа.
Подводные камни
.gitignoreсам в.gitignore. Иногда видишь - это случайность, обычно ошибка..gitignoreдолжен коммититься, иначе у команды разные ignore-правила.- Локальный игнор vs game.
.git/info/exclude- это «только у меня». Если используешь - фиксируй явно, иначе через год не вспомнишь, что что-то скрыто.
- Локальный игнор vs game.
- Регистр зависит от файловой системы. На macOS/Windows
*.PNGи*.pngобычно одно и то же, на Linux - разное. Если кросс-платформенный проект - пиши оба варианта.