将更改从一个分支合并到另一个分支时,在日志中查找相关范围的更改并手动复制消息非常繁琐。 TortoiseSVN通过“最近消息”按钮确实很好地解决了这个问题,但我必须通过'svn merge'来解决这个问题,以便进行持续集成设置。
我认为这是一个常见的问题,但找不到任何解决方案,所以这是我自己的。请随意发布更好的解决方案作为答案。
我经常想要将1:HEAD从/ trunk合并到/ branches / AutoDeploy。除合并之外,永远不会提交AutoDeploy,因此应简化操作。 我想使用'svn merge'或类似的命令行工具进行合并,我希望提交消息包含来自合并修订版的所有消息。
该解决方案必须适用于SVN和Windows,但与其他操作系统兼容的奖励点。
编辑:分开问答。
答案 0 :(得分:0)
要通过持续集成触发部署,我运行一个批处理脚本,该脚本合并来自trunk的最新更改,检索相关的日志消息并提交这些消息。
脚本是这样的:
文件夹结构
/trunk
/branches/AutoDeploy
/branches/AutoDeploy/AutoDeployTools
/branches/AutoDeploy/AutoDeployTools/Merge_from_trunk.bat
/branches/AutoDeploy/AutoDeployTools/sed.exe
/branches/AutoDeploy/AutoDeployTools/current_rev.txt*
/branches/AutoDeploy/AutoDeployTools/messages.txt*
*为每次合并生成的临时文件。
<强> Merge_from_trunk.bat 强>
@echo off
del *.txt
SET MessagesFile=messages.txt
SET CurrentRevFile=current_rev.txt
SET RepoUrl=svn://<host>
SET LocalBranchPath=../
REM CD %LocalBranchPath%
REM Get current revision for branch. Typically formatted as "683:684".
echo|set /p=Getting current revision for branch...
svnversion -c -n %LocalBranchPath% /branches/AutoDeployWeb > %CurrentRevFile%
REM Strip away number before colon (683:684 => 684)
sed -i s/.*\:// %CurrentRevFile%
REM Strip away any characters that indicate Modified (M), Switched (S) etc.
sed -i s/[a-zA-Z]// %CurrentRevFile%
SET /p BranchRev=<%CurrentRevFile%
echo DONE!
echo Current revision in AutoDeployWeb is %BranchRev%.
REM Retrieve relevant log messages for this merge.
echo|set /p=Getting log messages for revisions %BranchRev%:HEAD...
svn log %RepoUrl%/trunk -r %BranchRev%:HEAD > %MessagesFile%
echo DONE!
REM Merge
echo Merging...
svn up %LocalBranchPath%
svn merge svn://dev.swingcatalyst.com/SC_Online/trunk %LocalBranchPath%
echo Merging DONE!
REM Commit
echo|set /p=Committing...
echo Commit message:
type %MessagesFile%
svn commit --file %MessagesFile% %LocalBranchPath%
echo DONE!
pause
已知限制
编辑:添加了另一个已知限制。 编辑:将sed.exe添加到文件夹结构。