Это обычно то, что gitworkflow адрес
Вместо слияния A с B, B к C, C к Dи так далее, вы объединяете только ветки feature
.
Каждый разработчик (или группа разработчиков) работает над веткой feature
и объединяет ее с dev
для интеграционного тестирования.
Но когда дело доходит до слияния с дополнительным этапом жизненного цикла разработки (тестирование в вашем случае, затем подготовка, qa, любое имя, которое вы хотите), вы не объединяете dev
с test
Вы объединяете выбранные feature
ветви (которые изначально были объединены в dev
) с нужной вам веткой (тестирование, подготовка и т. Д.)
Таким образом, вы выбираете толькоподмножество функций, которые вы считаете готовыми и работающими вместе, в отличие от попытки вернуть «не готовые» функции из dev
, а затем объединить dev
в test
.
I detailэта модель далее здесь и иллюстрирует это здесь
Один важный момент: ветвь dev
(для объединения ветвей feature
) имеет значение transient :он создается / уничтожается для каждого нового выпуска (в отличие от одной фиксированной вечной ветви dev
, время от времени объединяемой с master
).
Вы воссоздаете столько веток интеграции, сколько необходимо для тестирования функций вместе (dev, test, staging и т. Д.).
Затем, когда все готово, вы объединяете только правильные ветви feature
в * 1048.* (или любую другую ветку release
), удалите ветку dev
и заново создайте ее для следующего выпуска.
Повторим:
Ветвь feature
объединена несколько развремя:
- один раз до
dev
для начального тестирования интеграции, - , затем та же самая ветвь
feature
снова объединяется в test
напрямую (где может произойти вторая сборка)вам не нужно перестраивать в feature
), - , затем снова объединять непосредственно в
staging
(каждый раз, потому что ветвь feature
считается готовой перейти к следующему этапу разработки жизненного цикла)
Вы не выбираете вишню из (например) test
в staging
.
Вы объединяете ветвь feature
, которая прошла test
вследующий шаг в жизненном цикле интеграции (слияние feature
с веткой staging
)
В настоящее время Роберт все еще строит новую функцию, и эта новая функция повлияет на некоторые файлы и основные изменения в коде.
Так что Энди не может сделать какой-либо пересмотр кода, чтобы исправить ошибку, потому что почти всекод изменился.
Да, Энди может в ветке hotfix
посвятить себя поддержке последнего кода, выпущенного в производство.
В этой ветке могут участвовать и Роберт, и Энди, и онибудет нести ответственность за применение их фиксаций исправлений к dev
, если указанное исправление там необходимо (так как код изменился, возможно, это исправление ошибки больше не актуально в dev
)
делает Эндислить из горячей ветки для проверки?потому что наш последний шаг - test
=> staging
=> staging trx
=> master
Весь смысл этого ответа - проиллюстрировать, что вам не нужно объединяться с *От 1103 * до B
до C
.
Для ветви hotfix
вы редко объединяете ее где-либо еще, поскольку ветви dev
или test
имеют код, который значительно изменился со времени последнего выпуска.Вы только cherry-pick исправление фиксирует, что вам нужно вернуться к dev
или test
.
После того, как feature
имеетЯ был уже в среде production
, я уничтожу эту ветку feature
, верно?
Ну ... да, "уничтожение" ветви feature
удалит указатель на эту ветку.
Но фактические коммиты, которые были частью упомянутой ветви, все еще будут видны из коммитного слияния, сделанного в master
.Это нормально, и может быть полезно для отладки этой функции позже: вместо большого финального коммита слияния вы можете позже проверить коммиты от второго родителя указанного коммита слияния: это коммиты из старой ветви функций.
В то время как новая ветвь feature A
уже находится в ветке test
, и тестер все еще проводит стресс-тестирование новой feature A
, в работе есть ошибки, и Энди исправит ошибку feature B
в hotfix
Разветвление.
Вопрос в том, что после того, как Энди исправил ошибку в ветке hotfix
, куда Энди должен объединить текущую ветку исправлений?
Потому что, когда были ошибки, и разработчик исправлял ошибку, он не пойдет напрямую в производство, тестер сначала выполнит тестирование, чтобы проверить, исправлена ли ошибка на самом деле или нет.
Вам понадобится вторая test
ветка, выделеннаядля тестирования исправлений (хотя я бы выполнил эти тесты непосредственно на hotfix
) и затем вернулось к master
, чтобы обновить производство.
Суть: когда вы идентифицируете параллельную разработку (как в «тестировании ветвей функций» и «тестировании исправления»), требуются отдельные ветви .
Но, опять же, для исправлений ошибок, это типично для "аварийного пути", для которого у вас есть более короткий рабочий процесс ветвления и выделенная ветвь test-hotfix
(назовите ее как хотите) для этого типа сценария.
Другой подход состоит в том, чтобы просто сбросить test
ветвь и слить обратно только те ветви, которые вам нужны в срочном порядке (feature B
в этом случае): test, merge B
до постановки и т.д. ... вплоть до master
.
Наконец, когда B
готов, вы можете использовать ту же ветку тестирования, чтобы добавить (объединить) feature A
обратно и продолжить тест на A
в среде, в которой B
уже был проверен.
Недостаток сброса теста заключается в том, что он блокирует всю остальную интеграцию разработки.
Именно поэтому выделенная ветвь для этого предпочтительна.