В постоянно развивающемся веб-проекте (а не в продукте) в настоящее время у нас есть следующая стратегия ветвления, примерно основанная на потоке git :
- разработка ветки: последняя рабочая версия
- основная ветка: версия будет выпущена / выпущенная версия
- тематические ветки: особенности в разработке
- ветви исправлений: срочные исправления в выпущенной версии
Мастер только для чтения, обновляется с помощью запросов на извлечение из ветвей разработки или исправлений . Каждое обновление приводит к созданию кандидата на выпуск и его развертыванию в промежуточной системе. Кандидаты на выпуск развертываются в производство после одобрения вручную.
Ветви объектов создаются на основе разработки или последнего коммита, который был объединен с основным. Построен запрос на извлечение из ветви функций для разработки, развернутой в бесплатной тестовой системе, где выполняются интеграционные и приемочные тесты (автоматические и ручные). После успешного тестирования и проверки PR объединяется, и он становится частью следующего выпуска (т. Е. Объединяется с разработки в мастер).
Моя цель
Я хотел бы упростить это и избавиться от развивающейся ветви. У ветви разработки в основном исторические причины, и, поскольку это всегда успешно протестированная версия, я думаю, что нет необходимости держать ее отдельно от главной. Удаление этого также упростит процесс выпуска, потому что больше нет никакого дополнительного слияния.
У меня есть следующие ограничения:
- релизы запланированы и не должны быть полностью автоматизированы
- хотя ветви функций, как правило, недолговечны, некоторые остаются незатронутыми в течение нескольких недель (например, переделка), но их также необходимо протестировать (в настоящее время они разрабатываются как открытые запросы)
- иногда за пределами обычного выпуска должна быть выпущена отдельная функция, которая фактически превращает ее в исправление. С текущей стратегией я могу перебазировать ветку объектов и объединить ее непосредственно с мастером
- бывает и так, что нам нужно сдерживать функции после неудачных приемочных испытаний с внешними системами
Где я не уверен насчет перехода:
- В настоящее время я создаю запросы на запуск для тестирования и слияния коммитов для релизов. Могу ли я объединить это?
- как бороться с исправлениями, когда мастер опережает последнюю версию. Должен ли я создавать и развертывать релизы непосредственно из ветвей исправлений?
- Есть ли разумный способ работы с функциями, которые следует исключить из выпуска после того, как они уже были объединены? Является ли отдельная ветвь разработки действительно преимуществом для этих случаев? Большую часть времени я в любом случае возвращаю и возвращаю коммиты вручную.