Мы достигли той точки в нашем проекте, когда нам необходимо произвести развертывание в производственной среде, но также необходимо постоянно совершенствовать будущие функции. Наш источник контроля в настоящее время имеет одну ветку разработки. В моей предыдущей компании была создана система из 3 филиалов: разработка, интеграция, производство. Разработка функций проводилась в среде разработки, тестирование в Integration и Production всегда было кодом, работающим в текущей производственной среде (за исключением краткого промежутка времени, когда было выполнено слияние из Integaration в Production и развертывание было выполнено).
Каждый раз, когда происходило изменение производства или слияние с производством, которое было развернуто в реальном времени, новая ветвь архива снималась с производства и получала номер версии. Любое изменение в более высокой ветке было объединено, поэтому изменения в Производстве вернутся, например, в Разработка. Это работало, но я всегда не видел необходимости в постоянном отделении интеграции и производства.
Два аспекта этой системы мне очень не понравились: 1) слияние из ветви интеграции в производственную ветку: я бы предпочел иметь «чистую» производственную ветку каждый раз, даже если они должны быть синхронизированы после слияния и 2) эта система не допускает одновременного развертывания нескольких систем, работающих под разными версиями кода, хотя это не было требованием ни для одной из команд, в которых я работал (пока).
Я слышал, что эта модель распространена, но в системе, которую я сейчас настраиваю, я предлагаю следующее:
Иметь ветку разработки, создавать новую ветку выпуска каждый раз, когда разработка готова к следующему развертыванию в производство. Ветвям релиза присваивается номер версии, а затем снова ветвится ветвь архива. Тестирование проводится в ветке Release. После развертывания все производственные исправления вносятся в ветку Release, затем создается новая ветвь архива с небольшим приращением номера версии после утверждения развертывания. Когда новое развертывание из разработки готово, создается новая ветвь выпуска ...
Для меня это проще и, на самом деле, лучше: ветки NO Integaration (без слияний) НЕТ и есть свежая ветвь Production (Release) для каждого развертывания и обслуживает текущие версии Production. Что мне не хватает? Зачем идти на модель развития, интеграции, производства?
Спасибо