Подтвердить что ты не робот

Как объединить ветку обратно в магистраль в SVN со всей историей фиксации?

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

merge -squash

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

4b9b3361

Ответ 1

С 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

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

Ответ 2

Я немного ржавый с слиянием, но разве это не должно трюк?

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

См:

svn merge --help

Ответ 3

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

Ответ 4

Чтобы создать слияние ветки и создать единую фиксацию для каждой фиксации в ветке, вы можете использовать script, я использую следующее:

#/bin/bash

BRANCH="http://your branch url"

for i in {1127..1138} # list of revisions
do
  REV=$i
  echo $REV $BRANCH
  echo merged $REV from $BRANCH > tmps.commit
  svn log -c $REV $BRANCH >> tmps.commit
  svn up
  svn merge -c $REV $BRANCH ./
  svn commit -F tmps.commit
  rm tmps.commit
done

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

Ответ 5

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

  • Объединить из нескольких ветвей.
  • Удостоверьтесь, что все слияния записаны как таковые.
  • Зафиксировать только одну новую версию.

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

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