Существует так много разных моделей ветвления, и так много людей со своими собственными дублями, что я не думаю, что есть определенная ссылка на то, что означает «GitFlow». (Пожалуйста, не стесняйтесь доказать, что я неправ, я люблю обсуждать подобные вещи).
Учитывая сказанное, я (лично) нахожу эти две ссылки очень полезными, полными и убедительными:
- Оригинальное сообщение в блоге NVIE
- разбивка DataShift
Итак, что?
По-моему, первые два пункта верны, а последние два неверны.
С точки зрения продвижения сборки все ветки release
и hotfix
могут (и ожидаются) быть развернутыми в вашей среде test
/ staging
для окончательной проверки. Из DataShift:
Код в ветви релиза развертывается в подходящей тестовой среде, тестируется, и любые проблемы исправляются непосредственно в ветви релиза. Этот цикл развертывания -> test -> fix -> redeploy -> retest продолжается до тех пор, пока вы не будете удовлетворены тем, что выпуск достаточно хорош для выпуска клиентам.
Затем, когда все проверено и вы готовы к выпуску:
Когда выпуск завершен, ветвь релиза объединяется с master и development, чтобы гарантировать, что любые изменения, внесенные в ветку релиза, не будут случайно потеряны новой разработкой.
Или, если подвести итог:
Основная ветвь отслеживает только выпущенный код. Единственные коммиты для мастера - это слияния из веток релиза и ветвей исправлений.
Здесь все становится сложнее, и разные проекты имеют разные мнения: откуда на самом деле возникает артефакт prod
?
На мой взгляд, у вас есть два варианта:
- Повторно использовать артефакт из
test
/ staging
, созданный из ветви release
/ hotfix
.
- Перестроить артефакт из коммита в
master
.
С точки зрения только кода они эквивалентны - код в master
точно соответствует коду, который был только что собран и развернут в test
/ staging
. Однако с точки зрения процесса сборки перспективы могут отличаться - разные переменные среды, разные ключи и т. Д.
Кроме того, все может быть сложнее, если смотреть на вашу команду test
против staging
.
Итак, что делать?
С учетом того, что это только мое мнение, и предположением, что staging
означает "производственное зеркало", я думаю, что следующий процесс является разумным:
- Ветви компонентов не развертываются в общей среде
- Среда
dev
(если имеется) создается / развертывается из ветви develop
- Среда
test
создается / развертывается из release
или hotfix
филиала
- Среда
staging
создается / развертывается из ветви release
или hotfix
ПОСЛЕ того, как нормальное тестирование / исправление завершено. ПРИМЕЧАНИЕ. Вы можете указать это с помощью тега RC
, но это вопрос командной работы.
- После проверки
staging
код объединяется с release
/ hotfix
в master
и помечается версией выпуска.
- Среда
prod
развернута с утвержденным и протестированным артефактом от staging
.
Заключительные мысли:
GitFlow - отличное место для начала, но в конечном итоге вы настроите его под свои нужды. Не бойтесь говорить «это то, что работает для нашей команды» и делайте это по-своему - просто убедитесь, что оно записано, чтобы все понимали, как вы это делаете.