如何将SVN中的分支合并回所有提交历史记录?

时间:2010-08-20 14:47:40

标签: svn merge

如何将SVN中的分支合并回所有提交历史记录?我知道在Git我可以使用

merge -squash

SVN中是否有相应的命令?我正在使用SVN 1.6。

5 个答案:

答案 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)

听起来你想:

  1. 从可能的几个分支合并。
  2. 正确记录所有合并。
  3. 仅作为一个新修订提交。
  4. 我认为这是基础SVN架构支持的。但我不知道是否有任何客户端提供它(虽然svnmucc将为多个cpmvrm命令执行此操作。除非你想做比我更多的研究(这不会花费太多),或者编写自己的客户端,这可以驱动SVN库来做(这可能很难,但仍然可行);那么我认为你将不得不牺牲上面的2.和3.中的一个。

    (如果您牺牲了3,您可以立即转储存储库并破解转储文件以仅使用一个修订版,但我认为仅仅有一个更简单的修订历史记录值得冒险...)