代码之家  ›  专栏  ›  技术社区  ›  zs2020

如何将分支合并回SVN中具有所有提交历史的主干?

  •  25
  • zs2020  · 技术社区  · 15 年前

    如何将分支合并回SVN中具有所有提交历史的主干?我知道我可以用Git

    merge -squash
    

    在SVN中是否有类似的命令?我使用的是SVN 1.6。

    5 回复  |  直到 13 年前
        1
  •  37
  •   Bert Huijben    15 年前

    对于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
    

    将所有更改作为单个提交移动。 (完成此操作后,应删除分支)

        2
  •  5
  •   DarkDust    15 年前

    我对合并有点生疏,但这难道不应该奏效吗?

    svn merge -rREV1:REV2 svn://server/branch my_trunk_wc
    

    见:

    svn merge --help
    
        3
  •  3
  •   Elmar Weber    14 年前

    要创建分支合并并为分支中的每个提交创建单个提交,可以使用脚本,我使用以下命令:

    #/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
    

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

        4
  •  1
  •   Borealid    15 年前

    您可以将每个变更集保存为diff,然后在主干上提交每个变更集。这通常被称为“移植”,有各种各样的工具可以自动完成这项工作。

        5
  •  0
  •   Edmund    15 年前

    听起来你想:

    1. 从可能的几个分支合并。
    2. 对所有合并进行适当的记录。
    3. 只作为一个新修订提交。

    我认为这是由底层的SVN架构支持的。但我不知道是否有任何客户提供它(尽管SVNMUCC将为多个客户提供它 cp , mv , rm 命令)。除非你想做比我更多的研究(这不会花费太多),或者写你自己的客户来驱动SVN库去做(这可能很难,但仍然可行);那么我认为你必须牺牲其中的一个。3。上面。

    (如果牺牲3,您可以在之后立即转储存储库,并将转储文件修改为仅使用一个修订版,但我认为不值得冒险只使用一个非常简单的修订历史…)