如何将SVN中的分支合并回所有提交历史记录?我知道在Git我可以使用
merge -squash
SVN中是否有相应的命令?我正在使用SVN 1.6。
答案 0 :(得分:38)
使用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
将所有更改作为单个提交移动。 (在此操作之后,您应该删除分支)
答案 1 :(得分:5)
我合并时有点生疏,但不应该这样做吗?
svn merge -rREV1:REV2 svn://server/branch my_trunk_wc
请参阅:
svn merge --help
答案 2 :(得分:5)
要创建分支的合并并为分支中的每个提交创建单个提交,您可以使用脚本,我使用以下内容:
#/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
这将检查您为特定分支指定的每个修订,并在当前目录上执行提交,从而保留每个单独的更改以及相应的消息。
答案 3 :(得分:1)
您可以将每个变更集保存为差异,然后将每个变更集提交到主干上。这通常被称为“移植”,并且有各种工具可以自动执行此操作。
答案 4 :(得分:0)
听起来你想:
我认为这是基础SVN架构支持的。但我不知道是否有任何客户端提供它(虽然svnmucc将为多个cp
,mv
,rm
命令执行此操作。除非你想做比我更多的研究(这不会花费太多),或者编写自己的客户端,这可以驱动SVN库来做(这可能很难,但仍然可行);那么我认为你将不得不牺牲上面的2.和3.中的一个。
(如果您牺牲了3,您可以立即转储存储库并破解转储文件以仅使用一个修订版,但我认为仅仅有一个更简单的修订历史记录值得冒险...)