Svn объединяет ветку в магистраль, сохраняя старую ветку

Я выполнил следующие шаги, чтобы объединить свою ветку в магистраль.

Взгляните на копию ствола:

svn co svn + ssh: // сервер / путь / к / стволу

Взгляните на копию ветки, которую вы собираетесь объединить:

svn co svn + ssh: // сервер / путь / к / ветке / myBranch

Измените текущий рабочий каталог на «myBranch». Найдите ревизию «myBranch», начинающуюся с:

svn log --stop-on-copy

Это должно отобразить вам изменения, которые были внесены до момента, когда ветвь была обрезана. Запомните этот номер (должен быть rXXXX, где XXXX - номер версии). Измените текущий рабочий каталог на trunk # Выполните обновление SVN:

свн вверх

Это обновит вашу копию ствола до самой последней версии и сообщит вам, на какой ревизии вы находитесь. Также обратите внимание на это число (должно быть написано «На ревизии YYYY», где YYYY - второе число, которое вам нужно запомнить). Теперь мы можем выполнить слияние SVN:

svn merge -rXXXX: YYYY svn + ssh: // сервер / путь / к / ветке / myBranch

Должна ли моя ветка после слияния быть удалена, если я проверил результаты? Мне нужно сохранить свою ветку (мне нужно продолжить разработку в этой старой ветке).


person drooooooid    schedule 10.11.2012    source источник


Ответы (3)


Я не уверен, что ты делаешь. Вам нужно только проверить ветку, с которой вы объединяетесь. Нет необходимости проверять обе ветви, выполнять переключение, изменять вашу рабочую копию, вести журнал и т. Д. Это действительно довольно простая процедура:

  • Вы создаете ветвь (мы будем называть ветвь копией) из исходной ветки (обычно trunk, но это не всегда так).
  • Вы можете работать как с исходной, так и с копией веткой, в зависимости от вашей техники разработки.
  • Когда вы хотите выполнить слияние, вы проверяете копию ветки, с которой вы сливаетесь. В конце концов, это ветка, которая получает изменения. Вы хотите протестировать эти объединенные изменения, прежде чем фиксировать их обратно в репозиторий.
  • Чтобы выполнить слияние, все, что вам нужно сделать, это использовать команду svn merge в вашей рабочей копии. Если вы выполняете слияние из исходной ветки с копией ветки, вы не используете переключатель --reintegrate. Если вы выполняете слияние ветки копия с исходной, используйте переключатель --reintegrate.

Вот и все, что нужно сделать. Вы можете выбрать ревизии, которые хотите объединить, или просто разрешить объединение всех изменений. Слияние Subversion - это довольно хорошо, и Subversion неплохо справляется с отслеживанием слияний.

Я предлагаю вам прочитать главу руководства по Subversion, посвященную ветвлению и слиянию < / а>.

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

Вы можете удалить ветку, если она больше не нужна. Например, делаю ветку Release 1.2. Я делаю на нем Release 1.2.1 и Release 1.2.2. Однако ни один из моих пользователей не использует Release 1.2.x, и я больше не работаю над ним. Я могу удалить его только потому, что когда сделаю svn ls http://server/svn/branches, я его не увижу. Будучи Subversion, я мог бы убрать его с дороги, если бы его удаление заставляло меня нервничать. Я могу переместить его на http://server/svn/branches/OBSOLETE/1.2. Таким образом, он не отображается, когда я перечисляю ветки, но он все равно присутствует, если я когда-нибудь решу, что мне это действительно, действительно нужно.

Между прочим, Subversion никогда не удаляет что-либо навсегда. Даже если я удалю ветку, всегда могу ее вернуть.

person David W.    schedule 11.11.2012
comment
1. Будьте очень осторожны с переключателем --reintegrate, потому что после такого слияния вы фактически навсегда закроете ветку и не сможете использовать ее в будущем 2. Скопируйте ветку с места для размещения потрачено впустую пространство - вы всегда можете удалить ветку, используя синтаксис BRANCH-URL @ PEG-REVISION 3. OP может по-прежнему использовать SVN-клиент до 1.5, где требуются некоторые уловки - person Lazy Badger; 11.11.2012
comment
1). Проблема с реинтеграцией исправлена ​​начиная с версии 1.6. Нет необходимости покидать ветку после --reintegrate. 2). Да, ветку всегда можно вернуть, об этом я сказал в своем ответе. К сожалению, многие организации-разработчики чувствуют себя некомфортно по этому поводу. Синтаксис для реанимации удаленной ветки также немного неясен. Я знаю это, а разработчики - нет. Перемещение ветки - хороший компромисс. Он все еще там, так что разработчики чувствуют себя лучше, но он тоже не мешает и никого не беспокоит. - person David W.; 11.11.2012
comment
Этот ответ устарел. Пожалуйста, посмотрите мой ответ ниже, в наши дни все намного проще. - person Jason; 07.04.2014

То, что вы хотите сделать, довольно просто с SVN 1.8 и явно поддерживается синхронизацией слияния и автоматической реинтеграции. Вот команды (документация и ссылки ниже подтверждают это):

cd path/to/branch/myBranch
svn up
svn merge ^/path/to/trunk  # usually just: svn merge ^/trunk
svn ci -m "Merged changes from trunk."

cd path/to/trunk
svn up
svn merge ^/path/to/branch/myBranch
svn ci -m "Reintegrated branch."

Из http://svnbook.red-bean.com/en/1.8/svn.branchmerge.basicmerging.html "Реинтеграция ветки" говорит следующее:

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

person Jason    schedule 07.04.2014

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

person Andy    schedule 10.11.2012
comment
Итак, если я выполнил вышеуказанные шаги и слил свою ветку с стволом (без опции --reintegrate), у меня все равно будет ветка активна. Так она и работает. Что делать, если я использовал опцию --reintegrate при слиянии моей ветви с стволом ? - person drooooooid; 10.11.2012