Следуя git-flow, как следует обрабатывать исправление более ранней версии?


101

Если вы попытаетесь следовать модели ветвления git-flow, описанной здесь и с инструментами здесь , как вы должны справиться с этой ситуацией:

Вы сделали выпуск 1.0 и выпуск 2.0. Затем нужно сделать исправление для 1.0. Вы создаете ветку исправления на основе тега 1.0 и реализуете исправление там. Но что тогда?

Обычно вы сливаетесь с мастером и помещаете туда тег версии 1.1. Но вы не можете объединить 1.1 с точкой после 2.0 на мастере.

Я предполагаю, что вы могли бы поместить тег выпуска в ветку исправления, но это создаст постоянную ветку рядом с мастером, которая будет содержать тег выпуска. Это правильный путь?


возможный дубликат Git-flow и master с несколькими параллельными ветвями выпуска [хотя другой вопрос новее, он имеет более полезные ответы, поэтому я пометил этот вопрос как повторяющийся]
danio

Ответы:


75

Похоже, что в git flow есть понятие «вспомогательной» ветки. Это используется для добавления исправления к более раннему выпуску.

В этой ветке есть дополнительная информация с этими примерами:

git checkout 6.0
git checkout -b support/6.x
git checkout -b hotfix/6.0.1

... исправьте, а затем:

git checkout support/6.x
git merge hotfix/6.0.1
git branch -d hotfix/6.0.1
git tag 6.0.1

или используя git flowкоманды

git flow support start 6.x 6.0
git flow hotfix start 6.0.1 support/6.x

... затем внесите изменения:

git flow hotfix finish 6.0.1

«Сохраните эти ветки поддержки или удалите их через некоторое время»
Эван Ху

@EvanHu ну, конечно, держите их, пока у вас есть эта ветка где-то в продакшене. После этого это историческая запись. Возможно, вы захотите узнать, как были исправлены исправления, если они когда-либо повторится.
Klas Mellbourn 01

Надо ли выпускать исправление, верно? Как мы можем сделать это?
Равиндранат Акила

33

Интересный вопрос! Связанный поток предполагает, что мастер может отслеживать производство. Это работает, только если производственные версии строго увеличиваются. Обычно это верно для веб-сайта, у которого есть только одна производственная версия.

Если вам нужно поддерживать несколько производственных версий, одной ветки для отслеживания производства недостаточно. Решение - не использовать мастер для отслеживания производства. Вместо этого используйте такие ветки, как release1, release2и т. Д.

При таком подходе вам может даже не понадобиться ветка исправления. Вы могли исправить проблему на release1ветке. Когда исправление будет достаточно хорошим, создайте release1.1тег в release1ветке.


Вы можете изменить git-flow на установку тегов выпуска в ветках выпуска. Это довольно серьезное изменение. Это нарушит текущие скрипты. Кроме того, что тогда будет содержать мастер?
Клас Меллборн

3
git-flowИнструмент не подходит , если вы должны поддерживать несколько версий производства. В рабочем процессе, предложенном в этом ответе, мастер вообще не используется. Вы можете назвать ветку разработки master, в конце концов, это просто имя.
Andomar

GitFlow поддерживает отслеживание более чем одной версии продукта
Andre L

7

git-flow предполагает, что вы поддерживаете только одну строку выпуска за раз, что удобно отслеживается мастером. Если вы поддерживаете более одного, вам нужно будет изменить процесс git-flow, чтобы иметь несколько трекеров ваших отдельных выпусков, которые вы поддерживаете (master-1, master-2). Вы можете продолжать использовать master для отслеживания самой последней строки выпуска в дополнение или вместо определенного трекера для самой последней строки выпуска (master вместо master-2).

К сожалению, любой инструмент git-flow, который вы можете использовать, вероятно, потребуется изменить, но, надеюсь, вы достаточно знакомы с процессом git-flow, чтобы обрабатывать этот конкретный случай напрямую с помощью команд git.


Если вы измените git flowпроцесс, он будет другим. Если какую-то модель нужно исправить (а не просто расширить), то она настолько успешна, как утверждает ее автор. Пожалуйста, ознакомьтесь с моим ответом на обсуждаемую нами тему.
Виктор Ярема

0

git config --add gitflow.multi-hotfix true Мне кажется, эта команда работает!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.