Замена соединительной линии веткой в Subversion
Предположим, что люди работали над багажником и на ветке хранилища Subversion. Я хочу отменить любые изменения в багажнике и заменить его копией ветки.
Как было предложено в другом вопросе, я могу просто переместить или удалить соединительную линию, а затем скопировать ветвь на туловище. Но тогда история ствола заменяется историей ветвей. Что делать, если я хочу сохранить историю стволов?
Я думаю, что я хочу что-то вроде слияния, но тот, где изменения назначения игнорируются и просто заменяются источником. Как я могу сделать это в Subversion? Это считается хорошей практикой?
Ответы
Ответ 1
Хотя это довольно старый поток, но по-прежнему делится опытом
Недавно мы сделали это для одного из наших проектов и следовали рекомендациям как:
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"
Следуя этим шагам, история инсталляции багажника сохранилась и заменила новую ветвь функции как тубу.
Ответ 2
Слейте все изменения из ветки в соединительную линию, а затем разрешите все конфликты с помощью
svn resolve path --accept theirs-full
Или вы можете сказать, что это слияние:
svn merge -rX:HEAD url/of/branch trunk\wc --accept theirs-full
После такого слияния у вас есть рабочая копия, которая выглядит как таковая на ветке. Все, что вам нужно сделать, это зафиксировать рабочую копию соединительной линии.
Ответ 3
Pre-1.5 это просто: убедитесь, что ваша рабочая копия указывает на соединительную линию, затем выполните команду "svn merge url-of-trunk url-of-branch". Изменения, которые вы получаете, являются дельтами между сундуком и веткой, эффективно "дайте мне все, что нужно, чтобы сундук выглядел как ветка".
Я не знаю, изменит ли этот вариант 1.5 новые возможности слияния.
Ответ 4
Я не совсем уверен, что понимаю, что вы пытаетесь сделать. Что вы хотите совершить со всеми изменениями, произошедшими в багажнике после создания ветки? Вы хотите, чтобы они не отображались в журнале при просмотре истории файла после слияния? Если да, то то, что вы получите, если вы удалите багажник и скопируете ветку на свое место - ветвь делится историей с багажником до разветвления, так что это то же самое, за исключением изменений, сделанных после ветки.
Если вы хотите сохранить историю ствола, но просто топайте на всех изменениях между ветвлением и слиянием, это немного сложнее. Я думаю, что если вы выполните слияние, игнорирующее родословную (там опция --ignore-ancestry
), она заменит содержимое ствола веткой. Вы также можете попробовать вариант --force
с помощью слияния (как вместо, так и в сочетании с --ignore-ancestry
). Попробуйте несколько способов узнать, получите ли вы результаты, которые вы хотите...
Если это не удается, вы всегда можете свернуть все изменения на соединительной линии с точки ветвления, а затем слить в ветки. Вероятно, это вызовет некоторые конфликты, которые вы, конечно же, захотите решить, используя версию из своей ветки. Я не знаю, оптимальны ли какие-либо из этих идей.
Ответ 5
trunk remplace (trunk with your branch)
*----x * ---->
\ |
\ |
*--------|
branch
Эта ветка была создана из туловища, поэтому будьте осторожны, не удаляйте жестоко туловище (проблемы с родословной). Сначала создайте тег со своей стволом, ваша резервная копия, в любом случае...
Я предлагаю сделать вот так:
Использование Eclipse SVN
-
щелкните правой кнопкой мыши > Team Branch/tag (создайте тег - ваша резервная копия)
-
Командa > переключить другую ветку/тег... выберите свою ветку, убедитесь, что ветка правильно загружена.
-
в ветке: Team > disconnect. Удалить информацию SVN.
-
Командa > общий проект... выберите свою ствол.
-
Командa > зафиксировать в вашей внешней линии.
-
щелкните правой кнопкой мыши... выберите Сравнить с. Branch/tag → найдите свою ветку. Если все в порядке, у вас будет: "Между выбранными входами нет различий".
Надеюсь, это поможет.