SVN филиал как версия с постоянным обслуживанием
В компании, над которой я работаю, мы выпускаем релизы каждые x раз (обычно три месяца). За это время у нас было от четырех до шести спринтов с возможностью ветвления, и весь наш код переходит в эту ветку.
Через некоторое время ветка выходит как версия ххх, и мы просто переходим к следующей версии. Но из-за обычных обязательств мы должны поддерживать старые версии месяцами / годами.
Интересно, правильна ли ветка от версии к выпуску. Из-за этого наша ветвь релиз-версия никогда полностью не реинтегрируется в транк. Они живут вечно. Чтобы их поддерживать, когда в ветке обнаруживается ошибка, мы исправляем ее в транке и вручную переносим ее в ветку (я предпочитаю такую) или вместо этого мы работаем в ветке и переносим ее (что-то вроде ветки коммита в транке без реинтегрировать) обратно в багажник. Обратите внимание, что наверняка может случиться так, что транк содержит код, который не будет / не может быть объединен в ветвь, возможно, потому что эта ветвь слишком устарела для поддержки огромных изменений.
Знаете ли вы преимущества / недостатки методологии, которую мы используем? у вас есть другой способ иметь дело с поддерживаемыми версиями? может быть вне свн?
3 ответа
Интересно, правильна ли ветка от версии к выпуску.
Ну, по крайней мере, это не совсем неверно - у вас есть управляемый код все время. Не полностью реинтегрированные ветви - это ваша внутренняя игра, в которую вы можете играть, если она не разрушает основную задачу - выпустить продукт по мере необходимости и решить старые проблемы. Разные строки кода - ваша цена
Из PM POV ваш "смешанный" рабочий процесс (2 источника, наборы слияний и обычная линейная история в ветке) становится сложнее для преобразования из журнала в окончательный "Готовый список" для выпуска, я предпочту, рекламировать и проводить кампанию для "ветви на задача "рабочий процесс" (в любом SCM) - таким образом, ветви (в большинстве случаев разработки) являются недолговечными, интегрируемыми частями ветвей работы и основной линии и версий, получая только наборы слияний, которые легче наблюдать. Но это только личные предпочтения и вкусы
Существуют в основном две разные "политики транков": стабильная транк, в которой транк всегда должен иметь высвобождаемое качество, и вся разработка происходит в реинтегрированных ветвях, и нестабильная транк, в которой активное развитие происходит в транке, и ветвление для стабилизации перед выпуском.,
Независимо от того, какая политика транков используется, выпущенная версия всегда должна быть ветвью, которая не реинтегрирована.
Пример, следующий за нестабильной политикой транка (активная разработка в транке, которая должна быть разветвлена для стабилизации перед ее выпуском):
Развитие прогрессирует в багажнике за 1.0. В какой-то момент создается ветка для 1.X и код стабилизируется. Когда код считается стабильным, он помечается 1.0 и освобождается. Тем временем работа продвигается в транке для версии 2, которая скоро будет разветвлена в ветке 2.X и так далее.
Ошибка, обнаруженная в версии 1.0, может быть исправлена в ветке 1.X, а версия 1.1 может быть выпущена из этой ветки с исправлением. Если ошибка актуальна в стволе, ее можно объединить. Но эта функция может быть удалена или перестроена в стволе, что делает бессмысленным или невозможным объединение этого исправления в ствол. Если ошибка была обнаружена в стволе бета-тестером версии 2, вы можете исправить ее там, а затем посмотреть, есть ли ошибка в старых ветках обслуживания, таких как 1.X, и затем объединить исправление там. Это работает в обе стороны.
Я не вижу, как может быть лучшая политика, чем ветвление для каждой версии (в моем примере ветвь для основной версии, а не для выпуска), и я не вижу ситуации, когда ветвь версии / выпуска должна быть реинтегрирована в багажник.
Я думаю, что я всегда буду хранить последний стабильный код в стволе, а текущая версия для разработки будет там в ветке (будет много версий в ветке, так как разные люди будут работать над разными требованиями). После этого, когда мой код будет готов чтобы выпустить, я объединю его со стволом, так как это будет последний стабильный код. В то же время я добавлю в папку с тегами номер последней версии и дату выпуска.
Теперь, когда у вас есть последний стабильный код в стволе и последний выпущенный исходный код в теге, вы можете удалить эту конкретную ветку.