Замена ствола веткой в Subversion
Допустим, люди работали над основной веткой и веткой репозитория Subversion. Я хочу отменить любые изменения в стволе и заменить его копией ветки.
Как предлагается в другом вопросе , я могу просто переместить или удалить ствол, а затем скопировать ветвь в ствол. Но затем история ствола заменяется историей ветки. Что, если я хочу сохранить историю ствола?
Я думаю, что я хочу что-то вроде слияния, но такое, в котором изменения места назначения игнорируются и просто заменяются источником. Как мне сделать это в Subversion? Считается ли это хорошей практикой?
Ответов (6)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
щелкните правой кнопкой мыши> Team Branch / tag (создайте тег - ваша резервная копия)
Команда> переключить другую ветку / тег ... выберите свою ветку, убедитесь, что ветка правильно загружена.
в ветке: Команда> отключить. Удалить информацию SVN.
Команда> поделиться проектом ... выберите ствол.
Команда> зафиксируйте в своем багажнике.
щелкните правой кнопкой мыши ... выберите Сравнить с .. Ветвь / тег -> найдите свою ветку. Если все в порядке, у вас будет: «Нет различий между выбранными входами».
Я надеюсь, что это помогает.
Я думаю, что вы пытаетесь объединить два дерева. Ниже я цитирую документацию 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.