Как исключить папки и файлы из репозитория с помощью файла .gitignore

Когда вы работаете с Git, не все файлы и папки нужно сохранять в репозитории. Некоторые создаются автоматически, содержат временные данные или персональные настройки. Чтобы Git их игнорировал, используется файл .gitignore.

Что это?

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

Разница между tracked и untracked файлами

  • Untracked — файлы, которые Git ещё не знает (новые)
  • Tracked — файлы, которые уже добавлены в Git (закоммичены или проиндексированы)

Как создать .gitignore

  1. Откройте терминал в корне вашего проекта
  2. Выполните команду:
    touch .gitignore
    
  3. Добавьте нужные шаблоны в этот файл
  4. Не забудьте закоммитить .gitignore:
    git add .gitignore
    git commit -m "Add .gitignore"
    

Знакомая аналогия

Представьте, что вы упаковываете вещи для переезда. Вам не нужно брать мусор или вещи, которые можно купить на новом месте. .gitignore — это ваш список «оставь это здесь».

Не путать с

  • .gitkeep — пустой файл, который добавляют в папку, чтобы Git её не удалял
  • git rm --cached — команда для удаления файлов из индекса Git

С какими концептами связано

  • Git — система контроля версий
  • Виртуальное окружение (venv) — часто исключается через .gitignore
  • Кэш и временные файлы — например, __pycache__

Как проверить игнорируемые файлы

Простая проверка:

git check-ignore имя_файла

Примеры использования .gitignore

# Виртуальное окружение
venv/

# Кэш Python
__pycache__/
*.py[cod]

# Настройки редактора
.vscode/
.idea/

# Логи в конкретной папке
logs/*.log

# Временные файлы везде
**/*.tmp

# Игнорировать всё, кроме важного файла
*
!important.txt

# Файлы с пробелами в именах
"файл с пробелами.txt"

# Системные файлы macOS
.DS_Store

Важные особенности

  1. .gitignore работает только для новых (untracked) файлов
  2. Для уже отслеживаемых (tracked) файлов нужно:
    git rm --cached имя_файла
    
  3. Изменения в .gitignore не влияют на уже проиндексированные файлы
  4. Шаблоны поддерживают:
    • *.log — все файлы с расширением .log
    • logs/*.log — только в папке logs
    • **/*.tmp — во всех подпапках
    • ! — исключение из правил

Где узнать больше