Как объединить ветку обратно в магистраль в SVN со всей историей фиксации? Я знаю, что в Git я могу использовать
merge -squash
Есть ли эквивалентная команда в SVN? Я использую SVN 1.6.
Как объединить ветку обратно в магистраль в SVN со всей историей фиксации? Я знаю, что в Git я могу использовать
merge -squash
Есть ли эквивалентная команда в SVN? Я использую SVN 1.6.
С 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
Чтобы переместить все изменения за один фиксатор. (После этой операции вы должны удалить ветку)
Я немного ржавый с слиянием, но разве это не должно трюк?
svn merge -rREV1:REV2 svn://server/branch my_trunk_wc
См:
svn merge --help
Вы можете сохранить каждый набор изменений как diff, а затем зафиксировать каждый поверх сундука. Это обычно называют "пересадкой", и для этого используются различные инструменты.
Чтобы создать слияние ветки и создать единую фиксацию для каждой фиксации в ветке, вы можете использовать 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
Это проверит каждую ревизию, которую вы укажете для конкретной ветки, и выполните фиксацию в текущем каталоге, сохраняя при этом каждое отдельное изменение соответствующим сообщением.
Похоже, вы хотите:
Я думаю, что это поддерживается базовой SVN-архитектурой. Но я не знаю, есть ли какие-либо клиенты, которые его предоставляют (хотя svnmucc будет делать это для нескольких команд cp
, mv
, rm
). Если вы не хотите проводить больше исследований, чем у меня (что не займет много времени), или напишите свой собственный клиент, который может управлять библиотеками SVN для этого (что может быть сложно, но все же выполнимо); то я думаю, вам придется пожертвовать одним из 2. и 3. выше.
(Если вы жертвуете 3, вы можете сразу же сбросить хранилище и взломать файл дампа только для использования только одной ревизии, но я не думаю, что это стоит того, чтобы просто иметь более упрощенную историю изменений...)