Обычно в Subversion объединяются целые диапазоны в один коммит, как слияние сквоша в git:
svn merge -r[REVISION1]:[REVISION2] svn://[REPO-URL]/[BRANCH] [TRUNK-DIR]
Начиная с Subversion 1.5, информация об отдельных оригинальных коммитах сохраняется в svn:mergeinfo
имущество.В TortoiseSVN вы можете найти их в пункте меню «Свойства».В командной строке вы можете запросить эту информацию следующим образом:
svn propget "svn:mergeinfo" [PATH]
Если вы действительно хотите иметь один коммит слияния на исходный коммит, вам нужно сделать это самостоятельно - что я считаю довольно болезненнымособенно с TortoiseSVN.
Кроме того, вы можете использовать скрипт для выполнения коммитов за вас.Поскольку вы используете TortoiseSVN, я уверен, что вы используете Windows, поэтому я сделал быстрый пакетный файл, чтобы сделать эту работу.Он будет перебирать диапазон ревизий, проверять, действительно ли ветка-источник имеет эту ревизию, и если да, то сначала объединяет ее, а затем фиксирует ее с копией исходного сообщения фиксации.[REVISION1]
будет первым коммитом исходной ветви, а [REVISION2]
будет последним коммитом исходной ветви.
Как есть и для обеспечения безопасности, этот скрипт только изменяет вашу рабочую копию (WC), выполнив svn merge
s, но не выполнив svn commit
s.Итак, во-первых, извлеките целевую ветвь (ствол, в вашем случае) в новый WC и проверьте, работает ли этот сценарий должным образом, то есть, если в WC объединены только соответствующие ревизии.Если это так, извлеките целевую ветвь снова в другой свежий WC и удалите последний REM
в скрипте, чтобы активировать фиксацию.
@ECHO OFF
REM inspired by https://stackoverflow.com/a/6192099/1529709
SETLOCAL EnableDelayedExpansion
SET BRANCH=svn://[REPO-URL]/[BRANCH]
FOR /L %%G IN ([REVISION1],1,[REVISION2]) DO (
REM check if log is empty and only merge if not
svn log -c %%G %BRANCH% > tmp-log.txt
FINDSTR /V "\-----------" tmp-log.txt > NUL
IF NOT ERRORLEVEL 1 (
ECHO Merging revision %%G
ECHO merge commit from %BRANCH% > tmp-commit.txt && ECHO. >> tmp-commit.txt
TYPE tmp-log.txt >> tmp-commit.txt
svn merge -c %%G %BRANCH% .
REM *** check results first before you activate committing! ***
REM svn commit -F tmp-commit.txt
) ELSE (
ECHO Skipping revision %%G
)
)
IF EXIST tmp-commit.txt DEL tmp-commit.txt
IF EXIST tmp-log.txt DEL tmp-log.txt
Отказ от ответственности: Этот скрипт был вдохновлен этим вариант для linux (который не проверяет наличие пустых ревизий)