Я использую Gulp для создания минимизированного CSS из моего кода SASS для проекта, над которым я работаю.
Я задавался вопросом, считается ли это наилучшей практикой для восстановления этого уменьшенного CSS при запуске из Git вживую ...
или
Хранить минимизированные CSS-файлы в Git, чтобы они автоматически запускались в производство без дальнейшей работы со стороны сервера?
Я был бы признателен за идеи людей по этому поводу. Спасибо!
version-control
git
css
deployment
Коннор Герни
источник
источник
/dev/null
.Ответы:
"Это зависит." Для нормального отслеживания разработки нет. Однако для облачных и DevOps развертываний это часто удобно или даже необходимо.
В большинстве случаев @ptyx верен . В самом деле, его «нет» можно сформулировать несколько более решительно. Что-то вроде "Нет. Нет! Боже, нет! "
Почему бы не хранить минимизированные или сжатые активы в системе контроля версий, такой как Git?
Они могут быть почти тривиально восстановлены вашим процессом сборки на лету из исходного кода. Хранение сжатых активов - это в основном хранение одного и того же логического контента дважды. Это нарушает принцип «не повторяйся» (он же СУХОЙ ).
Менее философская, но более практичная причина заключается в том, что минимизированные / оптимизированные активы имеют очень плохую сжимаемость при хранении в Git. Системы контроля версий работают, распознавая изменения («дельты») между различными версиями каждого сохраненного файла. Чтобы сделать это, они «различают» последний файл с предыдущей версией и используют эти дельты, чтобы избежать сохранения полной копии каждой версии файла. Но преобразования, сделанные на этапе минимизации / оптимизации, часто удаляют сходства и путевые точки, используемые алгоритмами diff / delta . Самый тривиальный пример - удаление разрывов строк и других пробелов; результирующий актив часто составляет всего одну длинную линию. Многие части процесса веб-сборки - такие инструменты, как Babel , UglifyJS , Browserify ,Меньше , а Sass / SCSS - агрессивно трансформируют активы. Их продукция возмущена; небольшие изменения на входе могут привести к значительным изменениям на выходе. В результате алгоритм diff часто полагает, что каждый раз он видит почти совершенно другой файл. В результате ваши репозитории будут расти быстрее. Ваши диски могут быть достаточно большими, а ваши сети - достаточно быстрыми, что не представляет большой проблемы, особенно если есть смысл хранить минимизированные / оптимизированные ресурсы дважды - хотя, исходя из пункта 1, дополнительные копии могут быть просто на 100% бессмысленными. навороты.
Однако есть серьезное исключение: DevOps / облачные развертывания. Ряд поставщиков облачных услуг и групп разработчиков DevOps используют Git и аналогичные системы не только для отслеживания обновлений разработки, но и для активного развертывания своих приложений и ресурсов на тестовых и производственных серверах. В этой роли способность Git эффективно определять, «какие файлы изменились?» так же важна, как и его более детальная способность определять "что изменилось в каждом файле?" Если Git должен сделать почти полную копию файла для минимизированных / оптимизированных ресурсов, это займет немного больше времени, чем в противном случае, но это не проблема, так как он по-прежнему отлично работает, помогая избежать копирования «каждого файла в проекте» на каждом развернуть цикл.
Если вы используете Git в качестве механизма развертывания, хранение минимизированных / оптимизированных ресурсов в Git может измениться с «нет!» желательно. Действительно, это может потребоваться, например, если у вас нет надежных возможностей сборки / пост-обработки на серверах / службах, на которых вы развертываете. (Как сегментировать ресурсы для разработки и развертывания в этом случае - это отдельная банка червей. На данный момент достаточно знать, что ею можно управлять несколькими способами, в том числе с помощью единого унифицированного репозитория, нескольких ветвей, вложенных репозиториев или даже нескольких перекрывающихся репозиториев. )
источник
Нет.
Контроль источника должен содержать только источник. Если он сгенерирован из исходного кода, он там не принадлежит - и должен генерироваться вашим процессом сборки.
Основная причина, по которой вы не хотите контролировать промежуточные артефакты сборки, заключается в том, что если вы это сделаете, то будет очень трудно доверять, работает ли ваш исходник из только что измененного вами источника или из промежуточного продукта, который вы не смогли восстановить. ,
источник
configure
этой причине многие даже помещают сгенерированные сценарии autoconf в git.