TortoiseSVN Subversion 1.8 - 合并 - 不再有重新整合分支的选项

66
在Tortoise SVN 1.8中,没有“reintegrate”分支选项。正确的方法是什么来重新整合一个分支?
选择合并(Merge),然后选择下一个选项: Merge first step 然后会弹出下一个窗口: enter image description here 还是我做错了什么?

你看到了哪些选项? - Leonel Sanches da Silva
3个回答

74

由于Subversion 1.8弃用了--reintegrate选项,因此TortoiseSVN中不再支持该选项。Subversion 1.8具有自动重新集成处理/检测功能。

请参见:Subversion 1.8发布说明,特别是自动重新集成部分

以下是相关区域,以方便查看:

自动重新集成合并(已弃用--reintegrate选项)

在合并另一个分支的所有可用修订版本的合并过程中,Subversion 1.8将自动决定合并是否正在重新集成分支。因此,重新集成分支不再需要--reintegrate选项进行正确操作。

现在svn merge的--reintegrate选项已经被弃用,建议不再使用。要重新集成一个分支,请确保trunk有一个干净的工作副本,并在其顶级目录中运行以下命令:

$ svn merge ^/branches/my-branch

此次合并仍将执行与早期版本中 svn merge --reintegrate 进行的类似的健全性检查:

  • 工作副本不能是混合修订的工作副本。
  • 工作副本不能切换子树。
  • 从重新集成目标(例如主干)到重新集成源(即要重新集成的分支)合并的修订范围中不能有间隙。

如果检测到任何这些条件,合并操作将被终止,必须采取必要步骤来解决问题,然后才能重新集成分支。与--reintegrate合并不同,允许在具有局部修改的工作副本中自动重新集成合并。

使用自动重新集成合并,可以按任何顺序在两个分支之间进行来回合并(不再需要“保持活力的舞蹈”)。为了获得最佳效果,建议始终合并所有可用修订版本,即不使用svn merge的-r或-c选项。只合并一小部分合格的修订版本会增加未来合并过程中出现问题的可能性。

在Subversion 1.8中使用--reintegrate将强制执行重新集成合并,无论在特定情况下是否适合执行该合并。

在您的情况下,您应执行以下操作

  1. 确保您正常使用干净、没有修改、最新的trunk工作副本
  2. TortoiseSVN -> Merge 合并此工作副本根目录
  3. 选择“合并一系列修订版本”
  4. 选择要重新集成的分支
  5. 不要指定修订版本范围(以合并所有可用修订版本)
  6. Subversion 1.8 应该能够自动检测到重新集成并执行相同的安全检查
  7. 继续进行您的合并操作

根据兼容性表,只要您的Subversion服务器和存储库格式都是版本1.5或更高版本,Subversion 1.8客户端就可以执行此自动重新集成。

我自己还没有进行过自动重新集成,我只是根据发布说明所说的内容来描述。


2
这个答案更好,因为它说“不指定修订范围(合并所有符合条件的修订版本)”。 - oldwizard
感谢您的详细解释。我注意到在SVN 1.7中,合并跟踪也可以完美地工作,因此我不认为有必要再使用reintegrate。在1.7中,是否可以只使用普通合并进行重新整合呢? - Fletch
@Fletch 我一直参考collab.net博客上的这篇文章(http://blogs.collab.net/subversion/subversion-merg)来进行自1.5版本以来的合并重新整合。我仍然在1.7中使用它进行分支重新整合 - 它基本上会进行许多额外的安全检查,并且在过去(1.7)为我发现了潜在问题。更仔细地查看发布文档,我认为建议是将客户端升级到1.8(服务器版本只需要1.5+),因为自动合并重新整合是一个客户端操作,然后您肯定不用担心它。 - Joshua McKinnon
1
自动重新集成功能并不总是无缝工作。当它失败时,合并会出现一些冲突,然后停止,并要求在允许您重新启动合并以继续之前解决这些冲突。这种症状足够重要,以促使您需要进行显式的重新集成合并。虽然相当罕见,但实际上可能会发生。我今天亲身经历了这个问题。 - Chucky
然后我想了解一下“合并两个不同的树”选项是用来做什么的。根据手册(https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html),“合并两个不同的树”“是重新整合方法的更一般情况”,并提到“如果您使用此方法将一个特性分支合并回主干,您需要从主干的工作副本中启动合并向导”。同时,它说“合并一系列修订版本”“被称为重新整合或自动合并”。非常令人困惑,我想知道最终的区别是什么。 - Pere

42

将分支合并到任何目标中

编辑

好的,扩展回答:用图片演示“白痴式合并”

前言

好的,我不会遮掩或隐藏使用的实例资源。

在此示例中使用的资源:

Repo Graph

  • 本地目录z:\WC-Trunk(主干的工作副本,在过程中使用)
  • TortoiseSVN 1.8.1,版本号24570 - 32位

重现步骤

为了将分支合并到主干,我必须拥有主干的工作副本,因此 - 将主干的HEAD检出到WC-Trunk中。

z:\WC-Trunk>svn ls
Dr?p?r.ma?ar.sv?nskan.man.eller.smalensk?n.txt
Hello.de.txt
Hello.en.txt
Hello.eo.txt
Hello.fr.txt

需要卫生间

z:\WC-Trunk>svn info
Path: .
Working Copy Root Path: Z:\WC-Trunk
URL: http://mayorat.ursinecorner.ru:8088/svn/Hello/trunk
Relative URL: ^/trunk
...

开始合并

开始

选择“合并范围”,因为“此方法适用于您对分支(或主干)进行了一个或多个修订,并且您想将这些更改移植到不同的分支”的情况。

合并类型

选择要合并到主干(我们的法国分支)的所有修订版本,如果未指定路径和树形库中的路径。

合并选项

定义(如果需要)一些附加的合并选项,可以测试合并以检测是否需要以任何形式解决冲突,或者最后只需开始真正的合并过程

选项2


我有三个分支要设置。当我选择“合并两个不同的树”时,需要设置起始分支、目标分支和工作副本。 - Jernej Novak
@JernejNovak - 在真正需要之前,请勿使用2-URL合并。 - Lazy Badger
3
在本教程结束时,您将把分支中的所有更改合并到主干的工作副本中,对吗?摆脱该分支的正常步骤是什么?提交主干并删除分支?我已经提交了主干并查看了版本图。创建时,主干到分支之间有一个分支曲线。然而,并没有显示重新集成的迹象。这是否意味着我的合并未被检测为重新集成? - R. Schreurs
如果我的工作副本中有分支、标签和主干,我该如何知道合并是否直接进入主干?或者我该如何指定将合并到主干? - eaglei22

14

当您打开上下文菜单时,按住Shift键,您将看到隐藏的选项。菜单中会有TortoiseSVN/Merge reintegrate...

但是,您应该使用新的自动重新集成合并


1
哇!感谢SHIFT选项。里面还有很多东西对我帮助很大。 - imclickingmaniac
4
谢谢,我不知道Shift选项!无论如何,在TortoiseSVN 1.9.2中已经没有Merge reintegrate...选项了。 - Micer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接