Subversion филиал реинтеграции - PullRequest
68 голосов
/ 19 сентября 2008

Когда ветвь реинтегрируется в ствол, эта ветвь фактически мертва?

Можете ли вы внести изменения в ветку после реинтеграции и объединить их позже в ствол?

Ответы [ 10 ]

79 голосов
/ 23 сентября 2008

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

Подробную информацию о причине этого можно найти здесь: Реинтеграция Subversion merge

По сути, это говорит о том, что можно снова объединить ваши изменения с соединительной линией, но поскольку реинтеграция вынуждает вас сливаться из ствола в ветвь перед операцией реинтеграции, вы столкнетесь с Reflective / Cyclic Merge, что очень проблематично в Subversion 1.5.
Согласно статье, рекомендуется сразу же после реинтеграции удалить вашу реинтегрированную ветку и вместо нее создать новую с тем же (или другим) именем.

Это известное поведение Subversion, которое будет рассмотрено в будущей версии (вероятно, в 1.6)


17 голосов
/ 26 мая 2010

На самом деле вам нужно выполнить слияние --record-only из транка в ветку ревизии, созданной коммитом --reintegrate:

$ cd trunk
$ svn merge --reintegrate ^my-branch 
$ svn commit

Committed revision 555. 
# This revision is ^^^^ important

А теперь вы записываете

$ cd my-branch
$ svn merge --record-only -c 555 ^trunk 
$ svn commit

Вы счастливы сохранить ветку сейчас

Более подробная информация находится в Глава 4. Ветвление и слияние, Расширенное слияние .

8 голосов
/ 25 февраля 2010

После того, как вы реинтегрируете из ветви в ствол, вы должны сделать одну из двух вещей:

  • Удалить ветку . Это самое простое, но оно усложняет просмотр истории отрасли.

  • Скажите своей ветви не объединять коммит реинтеграции . Если вы реинтегрируетесь в транк и фиксируете его как ревизию X, вы можете запустить эту команду в своей ветке: svn merge --record-only -c X url-to-trunk. Однако вам не следует делать это, если вы внесли какие-либо изменения в рамках фиксации, кроме самого слияния. Любые другие изменения никогда не вернутся в вашу ветку.

3 голосов
/ 22 сентября 2008

Несколько советов по объединению изменений обратно, если кто-то вносит изменения в ветку несколько раз (до 1.5): Помните, при какой ревизии вы сделали слияние ! Либо запишите номера ревизий куда-нибудь, или (что проще) сделайте тег . (Конечно, вы можете узнать это позже, но это ПИТА.)

Пример:

У вас есть макет хранилища, подобный этому:

/your_project
  /trunk
  /branches
  /tags

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

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0

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

Предположим, вы исправили множество ошибок и выпустили их на рабочий сервер, и вам нужна одна из этих функций в текущем транке:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2

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

svn merge http://rep/your_project/tag/1.0.0 http://rep/your_project/tag/1.0.2 .

Это то, что вы должны помнить. Вы уже объединили изменения между 1.0.0 и 1.0.2 в стволе. Давайте предположим, что в текущем производственном выпуске больше изменений:

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4

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

svn merge http://rep/your_project/tag/1.0.2 http://rep/your_project/tag/1.0.4 .

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

/your_project
  /trunk
  /branches
    /1.0.0-bugfixes
    /1.1.0-bugfixes
  /tags
    /1.0.0
    /1.0.1
    /1.0.2
    /1.0.3
    /1.0.4
    /1.1.0
2 голосов
/ 20 сентября 2008

Как все уже сказали здесь: ветвь не мертва, и фиксация в ветке может продолжаться просто отлично.

Иногда, хотя вы хотите убить ветку после слияния. Единственное надежное решение - удалить ветку. Недостатком является то, что тогда будет сложнее снова найти ветку, если вы захотите взглянуть на нее, скажем, по историческим причинам. Таким образом, многие люди оставляют «важные» ветви валяться и соглашаться не менять их. Хотелось бы, чтобы был способ пометить ветку как мертвую / только для чтения, таким образом гарантируя, что никто не сможет выполнить ее до дальнейшего уведомления.

2 голосов
/ 19 сентября 2008

Нет, ветвь еще жива, но в этот момент она точно такая же, как ствол. Если вы продолжаете разработку в ветке, вы можете позже объединиться со стволом.

1 голос
/ 15 января 2016

Прежде всего, вам следует обновить клиент и сервер Subversion, если вы все еще используете Subversion 1.7 или более раннюю версию. Нет причин использовать очень старые выпуски Subversion. По состоянию на 2016 год текущей версией является Subversion 1.9. SVN 1.8 также поддерживается и по-прежнему получает исправления ошибок.

Проблема, о которой вы спрашиваете, была решена в Subversion 1.8. Начиная с SVN 1.8, опция --reintegrate была устарела . Реинтеграция слияний теперь выполняется автоматически . См. Запись примечаний к выпуску Subversion 1.8, касающуюся улучшения 1009 *.

Чтение SVNBook 1.8 | Реинтеграция филиала :

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

...

Только Subversion 1.8 поддерживает такое повторное использование ветви функций. Ранее версии требуют особой обработки, прежде чем ветвь функции может быть реинтегрировался не раз. Смотрите более раннюю версию этой главы для дополнительной информации: http://svnbook.red -bean.com / о / 1,7 / svn.branchmerge.basicmerging.html # svn.branchemerge.basicmerging.reintegrate

1 голос
/ 19 сентября 2008

Вы можете объединяться из ветви в магистраль или из магистрали в ветку столько раз, сколько хотите.

0 голосов
/ 19 сентября 2008

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

0 голосов
/ 19 сентября 2008

Когда вы делаете слияние, вы указываете цель. Вы можете объединить различия TreeA и TreeB с TreeC, если хотите. Как предполагает Крис, ваш вопрос не имеет особого смысла. Если вы сливаете свою ветку в ствол, ветка остается нетронутой. Если ветвь больше не нужна, вы можете удалить ее.

...