Замена багажника на ветку в Subversion - PullRequest
30 голосов
/ 25 февраля 2009

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

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

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

Ответы [ 5 ]

36 голосов
/ 13 сентября 2012

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

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

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"

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

4 голосов
/ 25 февраля 2009

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

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

4 голосов
/ 25 февраля 2009

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

svn resolve path --accept theirs-full

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

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

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

1 голос
/ 12 июля 2017
trunk       remplace (trunk with your branch)
*----x      * ---->
 \          |
  \         |
   *--------|
     branch 

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

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

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

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

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

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

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

  5. Team> commit в вашем сундуке.

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

Надеюсь, это поможет.

1 голос
/ 25 февраля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...