🛠 .gitignore: почему важно игнорирование избыточных артефактов?
Салют,
Часто встречается, что команда разработки, в своих проектах не исключает артефакты, которые не участвуют в сборках, но при этом хранятся в ветках проекта GitSCM, да и с историей изменений.
Рассмотрим детальнее:
.gitignore - это конфиг (по факту файлик) игнорирований для Git, который сообщает ему, какие файлы и каталоги следует не учитывать, то есть не отслеживать и не добавлять в репозиторий.
Чаще всего используется для игнорирований временных либо тестовых, либо сборочных файлов, а также других элементов, которые не нужны в истории проекта. Поэтому имеются обширные описания игнорирований в репах продуктов, которые указывают только нежелательные для цикла разработки исключения. Например:
1. Файлы, образующиеся в процессе и результате компиляции проекта. Как правило, для них отводятся каталоги с именами вроде target/, output/, release/, debug/
2. Файлы, генерируемые тестовым фреймворком, профилировщиком, дебаггером и т.п.
3. Сгенерированная из кода документация — только если не генерируется в отдельный репозиторий, через который потом развертывается сайт с документацией (пример gpages)
4. Файлы, создаваемые при выполнении кода: журналы (*.log), результаты работы и т.п.
5. Временные файлы текстового редактора или среды разработки (*~)
6. Файлы, создаваемые операционной системой, например thumbs.db, .DS_Store
Пример:
- В C# хранится вывод, чтобы можно было легко собрать проект, но можно настроить, что запускалась при сборке, однако это возможно не для всех скриптов
- Хранить или не хранить composer.lock - нужно понимать его работу
- Нельзя заигнорить .idea/, потому что отвалятся настройки проекта, либо нельзя просто взять и оставить .idea/, потому что личные пути попадут ко всем и наплодят конфликтов.
Ремарка:
Для хранения есть классная возможность, как использование packages в виде артефакта (рассмотрим далее). Если можете использовать NuGet, Composer, CPAN, Lein, Maven, то бинарные зависимости должны быть там.
Итого: рекомендую исключать не только то, что не используется, но и что может содержать в себе какую-то историю важных изменений, которые позволят ресерчить проект.
Реко: для создания .gitignore удобно использовать генераторы шаблонов, типа этого.
#toolchain #reco #specialty
