Лучшие практики

Что нужно игнорировать

Есть несколько типов файлов, которые обычно нужно игнорировать в репозитории с помощью файла .gitignore. Это помогает держать репозиторий в чистоте и не коммитить лишний мусор.

Артефакты сборки. Не коммить результаты сборки в репозиторий: их можно заново сгенерировать из исходного кода, а в репозитории они будут только занимать место. К тому же они могут слегка меняться при каждой сборке (например, метки времени), что превратит историю версий в кашу.

Возможные исключения:
  1. Если артефакты — это финальный продукт (например, статические файлы сайта для деплоя).
  2. Если полезно видеть разницу в собранных файлах между релизами.
  3. Если процесс сборки медленный или ресурсоёмкий, коммиты собранных файлов могут сэкономить время.

Зависимости проекта. Не коммить зависимости: их можно установить через пакетный менеджер, а в репозитории они просто раздуют его размер. Частые обновления зависимостей тоже создают грязь в истории. Вместо этого лучше коммитить lock-файлы или манифесты, чтобы зафиксировать точные версии.

Возможные исключения:
  1. Коммит зависимостей может ускорить сборку, потому что их не придётся скачивать каждый раз. Это может быть актуально, если в проекте настроены автотесты.
  2. Закоммиченные зависимости гарантируют сборку проекта с точными версиями пакетов и защищают от атак на цепочку поставок (supply chain attacks). Представь хакера из Северной Кореи, который ломает глобальный реестр пакетов, а затем ты, ничего не подозревая, устанавливаешь заражённый пакет. Это реальная история, которая уже не раз происходила.

API-ключи и другие секреты. В проекте могут быть конфигурационные файлы с API-ключами, паролями и другими секретами. Коммитить их категорически нельзя, так как это конфиденциальная информация. Кроме того, в разных окружениях (для разработки, тестирования, продакшена) могут требоваться разные ключи.

Логи и временные файлы. Во время работы проект может генерировать логи, временные и другие файлы, которые не относятся к исходному коду. От них нет никакой пользы в самом проекте, и коммитить их не нужно.

Большие бинарные файлы. Крупные файлы (картинки, видео, архивы) весом более 100 МБ не подходят для контроля версий. Git не рассчитан на эффективную работу с гигантскими файлами, и это сильно замедлит репозиторий. Для таких случаев используй Git LFS или аналогичные инструменты. Конечно, можно закоммитить большой файл, но в перспективе это просто затормозит всю работу.

Файлы IDE и редакторов. Современные редакторы и IDE создают скрытые папки со своими настройками и кэшем. Обычно они не нужны в репозитории, так как содержат твои личные предпочтения и настройки среды. Однако их всё же коммитят, если команда хочет синхронизировать настройки редакторов для всех.

Системные файлы. В macOS операционная система может незаметно создавать в папках проекта служебные файлы с именем .DS_Store. В Finder они скрыты, но отлично видны в терминале. Для проекта от них нет никакого толка, поэтому их тоже не стоит коммитить.