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

zs2*_*020 27 svn merge

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

merge -squash
Run Code Online (Sandbox Code Playgroud)

SVN中有没有等效的命令?我正在使用SVN 1.6.

Ber*_*ben 39

使用Subversion 1.5或更高版本,合并将记录在svn:mergeinfo属性中的本地工作副本上.所以这些信息不会丢失.

如果使用svn log -g而不是正常,则可以看到合并的修订版svn log.

正常合并执行为

svn merge -rREV1:REV2 svn://server/branch my_trunk_wc 
Run Code Online (Sandbox Code Playgroud)

但是如果使用分支,有时使用重新整合合并会更方便.在这种情况下,您应首先使用类似的方式将所有主干更改合并到分支

svn merge svn://server/trunk my_branch_wc
Run Code Online (Sandbox Code Playgroud)

(这会合并尚未合并的所有内容)

将此更改提交到分支后,您可以使用

svn merge --reintegrate svn://server/branch my_trunk_wc
Run Code Online (Sandbox Code Playgroud)

将所有更改作为单个提交移动.(在此操作之后,您应该删除分支)

  • 正如您在运行`svn log -g`时所看到的那样,旧版本中的历史记录仍然存在.但是你不应该再使用分支了,因为如果没有更多的簿记就不能再合并.(请注意,更新的Subversion版本(1.8+)删除了--reintegrate要求,甚至可以通过正确的主干合并使分支再次可用) (2认同)

Elm*_*ber 6

要创建分支的合并并为分支中的每个提交创建一个提交,您可以使用脚本,我使用以下方法:

#/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
Run Code Online (Sandbox Code Playgroud)

这将签出您为特定分支指定的每个修订,并在当前目录上执行提交,从而保留带有相应消息的每个单个更改。


Dar*_*ust 5

合并时我有点生疏,但不应该这样做吗?

svn merge -rREV1:REV2 svn://server/branch my_trunk_wc
Run Code Online (Sandbox Code Playgroud)

看到:

svn merge --help
Run Code Online (Sandbox Code Playgroud)

  • 使用Subversion 1.5或更高版本,合并将记录在svn:mergeinfo属性中的本地工作副本上.所以这些信息不会丢失.如果使用svn log -g而不是普通的svn日志,则可以看到合并的修订版. (8认同)
  • 这不是`svn:mergeinfo`的用途吗? (2认同)