Использование Subversion с рекламной моделью - PullRequest
5 голосов
/ 27 января 2010

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

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

|
1
|
|\
| \ 
| 2 
3 | 
|\| 
4 |
| |\
5 | \
| 6 |
| | 7
|\|\|
| |\|
8 9 |\
| | | \
|\| | 10
x |\| |
  | |\|
  | | | 

a b c d
  • Будет ли эта модель работать гладко, используя Subversion, несмотря на отсутствие значимого багажника?
  • Будет ли работать автоматическое отслеживание слияний для обновлений с более ранних веток на более поздние?
  • Будет ли нормально закрыть / удалить / игнорировать ветку (в этом примере ветвь выпуска «а») без реинтеграции?
  • Будет ли нормально создавать ветки функций из каждой ветки релиза, и будет ли работать отслеживание слияний для них? (Они будут следовать рекомендуемой модели создания / слияния / реинтеграции.)

Редактировать - добавить дополнительную информацию.

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

    a
    |
    1
    |
   b|\ a
    | \ 
    |  2
    3  |
    |  |
    4  |
  b/|c |
  / 5  |
 |  |  6
 7  |  |
 b  c  a

В этом случае нам нужна функция 2 (завершенная в ветви a) в ветви b, но поскольку это слияние дочерних элементов и, следовательно, не поддерживается Subversion, это нужно будет сделать вручную. Точно так же функция 6 должна быть объединена вручную дважды. Я предполагаю, что это будет относительно медленный и подверженный ошибкам процесс по сравнению с автоматически отслеживаемыми слияниями.

Ответы [ 2 ]

1 голос
/ 28 января 2010

Если я понимаю вашу ситуацию, в ваших требованиях нет ничего, что могло бы сделать вещи настолько сложными, как вы, кажется, делаете их. Вы также уделяете слишком много внимания преимуществам автоматического и ручного объединения (подробнее об этом позже). Ветви CVS были бы другим делом, но не с тем, как SVN обрабатывает «ветки» (то есть, нет).

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

Требование, что вы объединяете только вперед, звучит так, как будто вам просто нужно объединить ревизии подмножества из основной строки, ревизии после данной ревизии ветви. Выполнение слияний таким образом позволит вам объединять изменения из произвольных ветвей обратно в основную линию так часто, как вам нравится (как они подтверждены вашими клиентами), и может применяться с уверенностью, что применяются только подтвержденные изменения. Вы можете настроить автоматическое слияние, чтобы отслеживать ревизию копии (см. --Stop-on-copy и слияния на основе диапазона). Затем отпустите ветви, чтобы получить набор подтвержденных изменений, которые произошли с данного момента вперед.

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

Чтобы ответить на поставленные вопросы:

  • Я не думаю, что предложенная вами модель очень эффективна. Напротив, он увеличил потенциал для хаоса отслеживания функций, так как вам, возможно, придется сканировать ветви на предмет изменений и объединяться вперед несколько раз. Более того, это, несомненно, запутает разработчиков, знакомых с SVN и более традиционными организационными структурами SVN.

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

  • Конечно. Филиалы фактически не имеют затрат в SVN на стороне сервера. На стороне клиента есть издержки, если вы делаете полную проверку корневого каталога, но это, как правило, глупо, несмотря ни на что. Аналогично, нет проблем с игнорированием / удалением ветки. Это просто еще одно изменение в глобальной иерархии ревизий, как и любое другое копирование / удаление / переименование / и т. Д.

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

Ура!

1 голос
/ 27 января 2010

Вы говорите:

Все работы из более ранних веток должны превратить это в более поздние. Работать позже ветви не должны делать это раньше те (это в наших контрактах)

Здесь, если мы заменим ветки релизами (я сомневаюсь, что ваши клиенты знают или заботятся о «ветвях»), мы получим:

Все работы из более ранних выпусков должны превратить это в более поздние. Работать позже релизы не должны попадать в более ранние версии из них (это в наших контрактах)

Я не вижу в этом требовании ничего, что могло бы предложить очень сложную схему ветвления, которую вы предлагаете - вы можете сделать это с помощью классического стиля разработки "нестабильного ствола". Либо у вас есть дополнительные требования, о которых вы нам не сообщили, либо вы чрезмерно проектируете.

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