使用TortoiseSVN如何将更改从主干合并到分支,反之亦然?

时间:2008-11-18 15:50:12

标签: svn tortoisesvn merge branch

我一直在阅读使用优秀且免费的Version Control with Subversion书籍进行分支/合并Subversion 1.5。我想我了解如何使用Subversion命令行客户端来执行我最常需要的操作,这些操作是:

使用中继更改

更新分支

从分支机构的工作目录中运行:

  

svn merge http://svn.myurl.com/proj/trunk

将分支合并为中继

从trunk的工作目录运行:

  

svn merge --reintegrate http://svn.myurl.com/proj/branches/mybranch

但是,我们使用TortoiseSVN 1.5作为Subversion的接口。我想知道如何最好地使用TortoiseSVN执行这些操作。新对话框在主菜单上提供三个不同的选项。

  1. 合并一系列修订
  2. 重新整合分支
  3. 合并两棵不同的树
  4. 根据我的收集,TortoiseSVN总是使用以下语法执行svn。

      

    svn merge [--dry-run] --force From_URL @ revN To_URL @ revM PATH

    此外,重新整合分支经常会失败并显示一条消息,指出某些目标尚未合并,因此无法继续,因此我不得不使用选项#3。

    我的问题是:

    1. 如何使用TortoiseSVN 1.5将更改从主干合并到分支?
    2. 如果使用和不使用reintegrate方法,我如何使用TortoiseSVN 1.5将分支合并到主干?
    3. 我应该为每个选项使用以上哪个选项?为什么?

    4. 修改

      通过“干运行”测试我发现命令行Subversion操作

        

      svn merge http://svn.myurl.com/proj/trunk

      类似于TortoiseSVN中的选项#1(合并一系列修订版),只要我将修订范围留空。

5 个答案:

答案 0 :(得分:242)

我无法正确地按照其他答案,这里有更多的假人指南...

您可以按照trunk -> branchbranch -> trunk的方式执行此操作。我总是首先trunk -> branch修复那里的任何冲突,然后合并branch -> trunk

将主干合并为分支/标记

  1. 结帐分行/标记
  2. 右键单击分支的根目录Tortoise SVN |合并......
  3. 合并类型:合并一系列修订版|点击下一步' enter image description here
  4. 合并修订范围:选择您复制到分支/标记的trunk目录的URL。输入要合并的修订或将该字段留空以合并所有修订|点击下一步' enter image description here
  5. 合并选项:我刚将这些保留为默认值|点击'合并' enter image description here
  6. 这会将修订合并到签出的分支/标记
  7. 然后将合并的更改提交到分支/标记

答案 1 :(得分:28)

行为取决于您的存储库具有哪个版本。 Subversion 1.5允许4种类型的合并:

  1. 合并sourceURL1 [@N] sourceURL2 [@M] [WCPATH]
  2. 合并sourceWCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. 合并[-c M [,N ...] | -r N:M ...] SOURCE [@REV] [WCPATH]
  4. merge --reintegrate SOURCE [@REV] [WCPATH]
  5. 1.5之前的Subversion只允许前两种格式。

    从技术上讲,您可以使用前两种方法执行所有合并,但最后两种方法可以启用subversion 1.5的合并跟踪。

    TortoiseSVN的选项会在您的存储库为1.5+时将范围或修订映射合并到方法3,或者在存储库较旧时将方法1合并到方法3。

    将功能合并到发布/维护分支时,应使用“合并一系列修订”命令。

    只有当您想要将分支的所有功能合并回父分支(通常是主干)时,您应该考虑使用“重新整合分支”。

    最后一个命令--Merge两个不同的树 - 仅在您想要超出正常的分支行为时才有用。 (例如,比较不同的版本,然后将差异合并到另一个分支)

答案 2 :(得分:12)

您应该使用“合并修订范围”。

要将更改从主干合并到分支,请在分支工作副本内选择“合并修订范围”,然后输入主干URL以及要合并的开始和结束修订。

以相反的方式合并主干中的分支。

关于--reintegrate标志,请查看此处的手册:http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate

答案 3 :(得分:1)

看看svnmerge.py。它是命令行,不能被TortoiseSVN调用,但它更强大。来自FAQ

  

传统的颠覆会让你   合并更改,但事实并非如此   “记住”你已经合并的东西。   它也没有提供方便   从存在中排除变更集的方法   合并。 svnmerge.py自动化了一些   工作,并简化它。 SVNMERGE   还会创建一个提交消息   记录来自所有事情的消息   合并。

答案 4 :(得分:0)

Shift-Right单击该文件夹并选择TortoiseSVN - >合并所有