Как объединить ветвь обратно в транк в SVN со всей историей коммитов?

Как объединить ответвление обратно в транк в SVN со всей историей коммитов? Я знаю, что в Git я могу использовать

merge -squash

. Есть ли какая-нибудь эквивалентная команда в SVN? Я использую SVN 1.6.

27
задан zs2020 9 November 2011 в 23:14
поделиться

4 ответа

В Subversion 1.5 или более поздней версии слияние записывается в вашей локальной рабочей копии в свойстве svn:mergeinfo. Так что эта информация не потеряется.

Вы можете увидеть объединенные ревизии, если используете svn log -g вместо обычного svn log.

Обычные слияния выполняются так же, как

svn merge -rREV1:REV2 svn://server/branch my_trunk_wc 

Но если вы используете ветвь, иногда удобнее использовать реинтеграционное слияние. В этом случае вы должны сначала объединить все изменения ствола в ветку, используя что-то вроде

svn merge svn://server/trunk my_branch_wc

(это объединяет все, что еще не объединено)

И после того, как вы зафиксируете это изменение в ветке, вы можете использовать

svn merge --reintegrate svn://server/branch my_trunk_wc

Чтобы переместить все изменяется как один коммит. (После этой операции следует удалить ветку)

39
ответ дан 28 November 2019 в 05:06
поделиться

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

1
ответ дан 28 November 2019 в 05:06
поделиться

Я немного устарел с объединением, но разве это не поможет?

svn merge -rREV1:REV2 svn://server/branch my_trunk_wc

См .:

svn merge --help
5
ответ дан 28 November 2019 в 05:06
поделиться

Похоже, вы хотите:

  1. Слить, возможно, из нескольких веток.
  2. Необходимо правильно записать все слияния как таковые.
  3. Зафиксировать только как одну новую ревизию.

Я думаю, что это поддерживается базовой архитектурой SVN. Но я не знаю, есть ли клиенты, которые его предоставляют (хотя svnmucc сделает это для нескольких команд cp , mv , rm ). Если вы не хотите провести больше исследований, чем я (что не займет много времени), или написать свой собственный клиент, который может заставить библиотеки SVN делать это (что может быть сложно, но все же выполнимо); тогда я думаю, вам придется пожертвовать одним из 2. и 3. выше.

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

0
ответ дан 28 November 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: