Безопасно ли использовать ветку функции Subversion после реинтеграции-слияния с транком? - PullRequest
21 голосов
/ 18 мая 2009

Должна ли ветвь функции быть удалена после ее объединения (реинтеграции) обратно в транк?

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

Это так? Зачем? Что я могу сделать, чтобы обойти это?

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

Обновление в самом верхнем ответе действительно указана довольно сложная процедура (объединение, удаление и повторный переход). Есть ли простой способ сделать это в TortoiseSVN? Не должно ли быть?

Ответы [ 5 ]

25 голосов
/ 19 мая 2009

edit : Эта проблема, кажется, была исправлена ​​в SVN 1.8. Раздел по базовому слиянию из книги SVN 1.8 был обновлен, чтобы сказать, что все в порядке, чтобы повторно использовать ветвь функции. Ответ ниже актуален только для более старых версий SVN.

<Ч />

Из раздела Основное слияние в svn book:

В Subversion 1.5, один раз - Реинтеграция слияния выполняется от ветви к стволу, ветви нет больше пригодны для дальнейшей работы. Это не в состоянии правильно поглотить новый багажник изменения, и это не может быть должным образом реинтегрирован в багажник снова. За это причина, если вы хотите продолжать работать над мы рекомендуем вашу ветку уничтожить его, а затем воссоздать его из багажника:

Это все еще имеет место в SVN 1.6 и 1.7.

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

  • вы можете заниматься разрешением конфликтов при реинтеграции со стволом
  • фиксация реинтеграции в транке поэтому содержит оба изменения исходя из функциональной ветви и работа по разрешению конфликта
  • Однако, Subversion вам не поможет объединить эту работу по разрешению конфликтов вернуться к ветке функций. Это просто смотрит на mergeinfo и думает «Эти изменения изначально произошли от ветвь функции, нет необходимости объединять их снова к их происхождению ".

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

8 голосов
/ 19 мая 2009

Мы делаем это часто (SVN 1.5 и выше). Вы просто должны убедиться, что эти изменения не вернулись обратно в ветку.

Для этого просто сделайте ряд ревизий, сливающихся от ствола к ветви. Укажите ревизию в транке, в которой вы произвели реинтеграцию ветви, и пометьте ее как «Только записывать слияние» от ревизии транка до ветви.

Как только вы это сделаете, вам будет хорошо идти.

Редактировать
Пункт, который wcoenen поднимает из статьи о конфликтах, является действительным. Если вы не синхронизируете изменения соединительных линий в ветви перед выполнением реинтеграции, у вас возникнет проблема конфликта. Мы поддерживаем синхронизацию ветки, и у нас не было проблем с продолжением повторного использования ветки после нескольких реинтеграций.

Изменить 2

Сохранение живой реинтегрированной ветви (http://svnbook.red -bean.com / ен / 1,7 / svn.branchmerge.advanced.html )

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

4 голосов
/ 17 января 2011

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

См. Поддержание живой реинтегрированной ветви в Книге Subversion.

3 голосов
/ 12 сентября 2013

Subversion 1.8 позволяет многократно объединять туда и обратно между двумя ветвями, тогда как версии 1.7 и более ранние не делали. Прочитайте примечание к выпуску здесь: http://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate.

0 голосов
/ 18 мая 2009

Все зависит от вашего личного мнения и количества людей, сливающихся в багажник.

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

Однако, если у вас не так много дочерних веток, и вы используете Subversion 1.5+, вы можете обойтись без этого, и это может помочь избежать конфликтов слияния.

Конечно, если ваш "ствол" используется в качестве бета-версии / релиз-кандидата / релиз-репозитория, то вы не должны этого делать.

...