Подтвердить что ты не робот

Подразделение Subversion/Trunk Best Practice - текущая актуальность ветки отрасли?

Моя команда разработчиков долгое время работала с подрывной деятельностью. Способ управления стволом и ветвями выглядит следующим образом:

  • Мы (почти) всегда освобождаемся от туловища

  • Каждый выпуск получает свою собственную ветку.

  • Когда релиз готов к QA, мы объединяем ветку обратно в магистраль и создаем новую ветку для следующей версии.

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

В последнее время у нас были некоторые сеансы слияния кошмаров, частично из-за некоторых серьезных изменений в приложении. Они не всегда идут гладко и иногда появляются всплывающие окна во время QA, где подрывная деятельность не сливалась совершенно правильно.

Одним из решений может быть объединение изменений в соединительную линию в ветки выпуска на регулярной основе, скажем еженедельно, для обеспечения того, чтобы самые последние изменения соединительных линий были в ветке. Конфликты затем могут быть исправлены ближе к реальному времени.

Каков ваш опыт в этой проблеме? Существует ли стандартная передовая практика? Кроме того, есть ли у вас хороший способ отслеживать, какие изменения были объединены в филиал (достойные комментарии в подрывной деятельности, вероятно, могут справиться с этим).

4b9b3361

Ответ 1

Во-первых, я не думаю, что решение для одного размера подходит для управления ветвями и выпусками кода. Но коснуться нескольких своих пунктов с моей точки зрения:

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

  • Проактивно научить людей хорошо сливаться. Разработчик, внесший изменения, должен (или быть связан с ним) слиянием. Поймите, что вы делаете, и как он будет выглядеть, когда он будет закончен. Я слишком часто вижу, что люди запускают интеграцию, не зная, что они делают, и чего они ожидают в результате.

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

Ответ 2

Итак, предполагаю, что у меня есть ваша модель прямо здесь: вы разрабатываете серьезные изменения в проекте в ветке (с багажника), которая может стать довольно старой.

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

Вы можете эффективно управлять только двумя конкурирующими версиями продукта с этой моделью, которых может быть достаточно на данный момент, но в любом случае может укусить вас другими способами и будет ухудшаться, если вам когда-либо понадобится управлять 3 или 4 версиями. Могу ли я предложить инвертировать способ работы?

У вас есть ветвь версии для каждой версии. Это должно быть разветвлено с багажника (при любой ревизии). Единственный способ изменить ветвь версии - объединить ревизии с внешней стороны.

Это означает, что вы можете работать в основном на багажнике, а не в большой ветки развития. Вы также применяете исправления ошибок непосредственно к соединительной линии - поэтому у вас нет серьезных проблем с интеграцией, которые сохраняются для следующей версии. Чтобы освободить исправления ошибок до предыдущих версий, просто слейте необходимые исправления в соответствующую ветку Version.

Таким образом вы можете сохранить все, что хотите выпустить в ветки, но только на самом деле выпускаете то, что вам нравится, потому что все вы сливаетесь с веткой версии.

Вы можете по-прежнему использовать ветки развития, если вам нужно, но вы можете сохранить их цели и небольшие, возможно, отдельные функции, а не крупные проекты.

Это позволит вам управлять несколькими версиями разумным способом и хорошо отслеживать, что в каждой версии, используя svn merge-info.

Ответ 3

Наш опыт состоит в том, чтобы четко различать:

  • ветка развития
  • ветвь консолидации (отрасль, используемая для консолидации разработки, мы обязательно входим в производство

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

В "ветки развития" мы можем управлять важными изменениями, включая некоторые, которые не будут в конечном итоге в следующей версии (потому что слишком сложные, не готовые вовремя, зависящие от других поздних разработок,...)

Филиал консолидации представляет собой заключительные шаги (обратите внимание на множественное число), необходимые для завершения выпуска. Это происходит после встречи, на которой проверяются все функции, необходимые для доставки.

Мы объединяемся только в "ветвь консолидации", которую мы обязательно вводим в производство. Мы продолжаем эту ветвь до финальной версии.

Ответ 4

В полной мере согласен с Энди: "Единый вариант не подходит для всех решений", но проблема не должна поддерживать обновление вашей ветки релиза, а наоборот.

Хорошее управление изменениями должно привести к неустойчивости вашего ветки. Проблемы с Gating должны быть исправлены на ветки релиза, а затем сразу же объединены с багажником. Будьте готовы к тому, чтобы это "слияние" было нетривиальным, проблема с выпуском релиза может даже не существовать на магистрали, но вам нужно сделать анализ и проверить его без исключения.

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

Ответ 5

Во-первых, я полностью согласен с предыдущими респондентами в том, что не существует единого варианта для всех решений.

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

Наша общая политика:

  • Строка содержит текущее состояние проекта;
  • Мы используем ветки для разработки новых функций, исправлений ошибок и т.д. Филиалы снова объединяются в соединительную линию;
  • Чтобы освободить, мы создаем тег из текущей соединительной линии и отпускаем тег.

Энди также сделал важный момент, который необходимо подчеркнуть: "Упреждайте научить людей, как хорошо слиться". Многие, если не большинство наших проблем, похоже, возникают из-за плохой практики слияния.