Замена ствола веткой в ​​Subversion

Допустим, люди работали над основной веткой и веткой репозитория Subversion. Я хочу отменить любые изменения в стволе и заменить его копией ветки.

Как предлагается в другом вопросе , я могу просто переместить или удалить ствол, а затем скопировать ветвь в ствол. Но затем история ствола заменяется историей ветки. Что, если я хочу сохранить историю ствола?

Я думаю, что я хочу что-то вроде слияния, но такое, в котором изменения места назначения игнорируются и просто заменяются источником. Как мне сделать это в Subversion? Считается ли это хорошей практикой?

Ответов (6)

Объедините все изменения из ветки в магистраль, а затем разрешите все конфликты с помощью

svn resolve path --accept theirs-full

Или вы можете сказать слиянию сделать это:

svn merge -rX:HEAD url/of/branch trunk\wc --accept theirs-full

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

Хотя это довольно старая тема, но я все еще делюсь своим опытом

Недавно мы сделали это для одного из наших проектов и следовали следующим рекомендациям:

svn copy <repos/trunk> <repos/tag/old_trunk> -m "copied old trunk as tag"

svn delete <repos/trunk> -m "deleted trunk temporarily"

svn copy <repos/branch/new_fetaure_branch> <repos/trunk> -m "placed new trunk with features"

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

trunk       remplace (trunk with your branch)
*----x      * ---->
 \          |
  \         |
   *--------|
     branch 

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

Предлагаю сделать так:

Использование Eclipse SVN

  1. щелкните правой кнопкой мыши> Team Branch / tag (создайте тег - ваша резервная копия)

  2. Команда> переключить другую ветку / тег ... выберите свою ветку, убедитесь, что ветка правильно загружена.

  3. в ветке: Команда> отключить. Удалить информацию SVN.

  4. Команда> поделиться проектом ... выберите ствол.

  5. Команда> зафиксируйте в своем багажнике.

  6. щелкните правой кнопкой мыши ... выберите Сравнить с .. Ветвь / тег -> найдите свою ветку. Если все в порядке, у вас будет: «Нет различий между выбранными входами».

Я надеюсь, что это помогает.

Я думаю, что вы пытаетесь объединить два дерева. Ниже я цитирую документацию tortoisesvn ( https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html )

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

В вашем случае ствол от, а до - ветка

Я надеюсь, что это будет полезно

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

Если вы хотите сохранить историю ствола, но просто потопить все изменения, сделанные между ветвлением и слиянием, это немного сложнее. Я думаю, что если вы выполните слияние, которое игнорирует происхождение (есть опция --ignore-ancestry ), оно заменит содержимое ствола на ветку. Вы также можете попробовать --force вариант с объединением (как вместо, так и в сочетании с --ignore-ancestry ). Попробуйте несколько разных способов, чтобы увидеть, получите ли вы желаемый результат ...

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

До версии 1.5 это просто: убедитесь, что ваша рабочая копия указывает на транк, затем выполните команду «svn merge url-of-trunk url-of-branch». Изменения, которые вы получаете, представляют собой дельту между стволом и ветвью, фактически «дайте мне все, что нужно, чтобы ствол выглядел как ветвь».

Я понятия не имею, изменят ли этот сценарий новые возможности слияния 1.5.