Обычно плохая практика развиваться против магистрали или магистрали. Магистраль должна использоваться как основной набор кодов и должна отражать код, который в настоящее время представляет производство. Если вы еще не в производстве, он должен представлять золотую копию и всегда должен собираться и подвергаться автоматическим регрессионным тестам. Это не должно использоваться, чтобы показать статус развития или деятельность. Защитите свой ствол от изменений и не поддавайтесь искушению, чтобы разработчики могли проверять и блокировать код на стволе. Единственные обновления, на мой взгляд, должны быть через процесс слияния, когда вы готовы вернуть свой код на основную линию.
При ветвлении следует учитывать цель, сложность и продолжительность разработки.
• Это для поддержки команды разработчиков, работающих над новой функцией или существенной частью разработки?
• Используете ли вы традиционные процессы или различные гибкие ароматы, которые существуют?
• Это приспособлено для разработки патча или исправления для производства?
• Какую разработку и, в частности, тестирование вы проведете в ветке и будете ли вы сохранять ветку до тех пор, пока производные артефакты не будут созданы, протестированы и будут признаны доступными?
Существует много моделей, но лишь немногие уделяют достаточное внимание процессу «сборки» и последствиям восстановления ваших высвобождаемых артефактов.
Предположим, у вас есть следующий жизненный цикл: DEV-> SYSTEM-INTEGRATIONTEST-> UAT-> PRE-PROD-> PRODUCTION. Предположим, вы создаете ветку от основной линии, чтобы приспособить процессы разработки и сборки. Ваш цикл разработки \ сборки \ тестирования продолжается вплоть до UAT. Артефакты, произведенные из этой ветки, были подвергнуты достаточному тестированию, чтобы посчитать их потенциально подходящими для выпуска. Вы можете утверждать, что артефакты, подписанные пользователями, также подвергались системному и интеграционному тестированию.
Некоторые люди рекомендуют в этот момент объединить исходный код со стволом и рекомендуют вам создать ветвь RELEASE после успешного перестроения ствола. Для меня это нормально, если решение стабильно и не требует каких-либо дальнейших изменений до начала производства, иначе вы рискуете распространить ошибки в другом месте. В переменную его нужно будет поменять.
Если вы обнаружите проблемы в PRE_PROD, где эти изменения «Fix» будут сделаны? Многие предполагают, что вы можете вносить изменения в код непосредственно в ветке релиза. Если вы продолжите, эта модификация создаст новую сборку и новый набор артефактов. Вы можете отправить эти артефакты обратно через PRE_PROD и запустить в производство, поскольку базовый код был проверен в ходе предыдущих испытаний, а изменения, внесенные для стабилизации выпуска, считаются безрисковыми? Но у вас есть проблема.
Вы не можете утверждать, что исполняемые файлы \ артефакты, выпущенные для pre-prod и впоследствии производства, были протестированы в ваших более низких средах. Несмотря на высокую степень достоверности, выходные данные из сборки ветки релиза отличаются от тех, которые получены из сборок разработки. Это может не пройти аудит.
Разветвление для меня - это управление вашим кодом, а не вывод сборки или только выпуск. Если вы рекомендуете ветвление для выпуска и стабилизации выпуска (предварительное исправление), вы должны принять во внимание вышеупомянутый риск в сочетании с необходимостью значительного регрессионного тестирования.
На основании того, что транк должен представлять производственный код, вы не можете передать ему код, если он не был передан в производство первым. Я выступаю за создание ветки, которая поддерживает разработку, сборку и выпуск как единый цикл. Чтобы избежать долговечности веток и ненужного отклонения от ствола (и потенциальных проблем большого взрыва), ограничивайте разработку настолько, насколько вы можете, и часто высвобождайте и репатриируйте вместе с стволом, чтобы поддерживать другие усилия по разработке.