Каков рекомендуемый способ отделить текущую разработку от разработки обслуживания в программном обеспечении контроля версий?

10

У меня есть какое-то приложение, управляемое с помощью Git. Я только что выпустил новую версию 2.x, которую я планирую поддерживать в долгосрочной перспективе (в основном исправление ошибок). А пока я хотел бы начать работать над версией 3.x. Каков рекомендуемый способ справиться с этим? Должен ли я создать ветку для версии 2.x и иметь развитие 3.x на мастере? или другой путь?

Laurent
источник
Есть разные ветки для разработки и стабильные.
Одед
Так что же обычно входит в основную ветку? (до сих пор я всегда там все делаю)
Лоран
Вы должны решить, что вы хотите иметь masterв виду. Это просто ярлык.
Одед

Ответы:

13

Здесь был описан очень интересный способ работы: успешная модель ветвления Git

Я нахожу это очень интригующим, но еще не использовал его.

Очень хорошо, как просили (очень) краткое суммирование того, что говорится в статье:

  • Основная ветвь только каждый представляет законченные этапы (т.е. версии 1.0, 1.1, 1.2 и т. Д.)
  • Разработка ведется в своей собственной ветке (удобно называть «разработка», кто бы мог подумать?). Ветвь разработки объединяется обратно с веткой Master, когда делается полная версия функции.
  • Отделение от разработки - это функциональные ветви. Они представляют отдельные функции для следующего (или любого будущего) выпуска. Они объединяются с развивающейся ветвью.
  • Другая ветвь, пришедшая из разработки, это ветвь "релиз". Это ветвь, представляющая почти полную версию релиза, где нужно очистить только мелкие детали. Он сливается с веткой разработки и в конечном итоге с веткой Master
  • "Hotfix" ветвится в ветке master из ветки master, если вы обнаружите серьезную ошибку в одном из ваших выпусков (например, "Если использование вводит код конами, наша программа переформатирует основной жесткий диск ..."). Он ветвится из версии с ошибками и, когда исправление закончено, сливается обратно в основную ветку И ветку devlopment.

Вот и все, но, поверьте мне, статья описывает ее более подробно, а с помощью полезной графической визуализации ее гораздо проще понять.

Sorcy
источник
2
Вы должны включить в ответ какое-то объяснение вашего предложения, желательно, чтобы люди не переходили по ссылке, чтобы получить общее представление о модели. Ссылки имеют плохую привычку становиться заветными, и ответы должны стоять сами по себе ...
yannis
+1 Практически то, что мы используем на работе, и это действительно работает.
Эд Джеймс
1
Я полагаю, что это обычно называют "стабильной магистралью" или моделью "ответвлений".
слеске
«Мастер ветвь только каждый представляет законченные этапы (т.е. версии 1.0, 1.1, 1.2 и т. Д.)» Я не хотел бы мастер ветвь с версиями 1.0, 1.1, 1.2, 2.0, 1.3, 2.1, 1.4, 2.2, 3.0, 1.5 в этот порядок, это было бы очень запутанным. Я предполагаю, что существует неявное предположение о том, что существует не более одного потока, по которому делаются выпуски, но это не так в моей практике. Есть ранние последователи и люди, которые хотят чего-то более стабильного.
AProgrammer
Что ж, в конечном итоге ветка - это всего лишь ярлык, чтобы вам было легче узнать, что там происходит. Так что если вам это не нравится, ничто не мешает вам использовать ветку Master только для стабильных выпусков мэров и иметь "пробную" ветвь (или как вы хотите ее называть) для небольших добавочных выпусков.
Сорси
5

Мой принцип состоит в том, что чем более кратким является ответвление, тем глубже оно должно быть в структуре ветви и тем более конкретным будет его название. Чем длиннее ветвь, тем меньше она будет в структуре ветви и тем более обобщенным будет ее имя.

Таким образом, вы сохраняете свой мастер для более долгосрочной (3.X) версии и продолжаете называть эту ветку общим именем (master, trunk, devel, ...), а не конкретным (кодовое название выпуска или даже худшие номера выпуска). которые слишком сильно зависят на практике от позднего решения о маркетинге)

Это не имеет большого значения в такой системе, как git, которая имеет плоское пространство имен для ветвей и где ветви эквивалентны. Это имеет большее значение для системы, такой как clearcase, которая имеет иерархическое пространство имен для ветвей (полное имя ветви V4 в конечном итоге будет main / v1 / v2 / v3 / v4 ...)

AProgrammer
источник
+1 за исключением того, что я не знаю, что на самом деле означает глубокий и неглубокий в этом контексте, возможно, вы могли бы немного расширить эти термины?
Майкл Даррант
Думает о ветвях, делающих дерево. Они могут выйти из ствола или другой ветви. Мелкий означает, что число шагов ветвления между ветвью и стволом мало, а глубокий означает, что число шагов ветвления важно. То, что мало и важно, в основном относительное, но я видел схемы, для которых каждый новый релиз был на шаг дальше предыдущего. Если вы используете плоское пространство имен, это не так уж плохо. Если пространство имен является иерархическим (прозрачный регистр, CVS, RCS, Perforce также могут использоваться таким образом), вы получаете более длинные и длинные имена.
AProgrammer