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


132

我一直在阅读使用出色且免费的Subversion版本控制书,了解有关Subversion 1.5的分支/合并的信息。我认为我了解如何使用Subversion命令行客户端执行我最需要的操作,这些操作是:

使用分支中的更改更新分支

在分支的工作目录中运行:

svn合并http://svn.myurl.com/proj/trunk

合并分支到主干

在中继的工作目录中运行:

svn merge-重新整合http://svn.myurl.com/proj/branches/mybranch

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

  1. 合并一系列修订
  2. 重新整合分支
  3. 合并两棵不同的树

据我所知,TortoiseSVN始终使用以下语法执行svn。

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

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

我的问题是:

  1. 如何使用TortoiseSVN 1.5将更改从主干合并到分支?
  2. 如何使用TortoiseSVN 1.5将分支合并到主干,无论是否具有重新集成方法?
  3. 我应该为每个选项使用以上哪个选项,为什么?

编辑

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

svn合并http://svn.myurl.com/proj/trunk

只要我将修订范围留为空白,就类似于TortoiseSVN中的选项#1(合并修订范围)。


找不到链接!= /
莱昂纳多·科斯塔

Answers:


28

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

  1. 合并sourceURL1 [@N] sourceURL2 [@M] [WCPATH]
  2. 合并sourceWCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. 合并[-c M [,N ...] | -r N:M ...]源[@REV] [WCPATH]
  4. 合并-重新整合SOURCE [@REV] [WCPATH]

1.5之前的Subversion仅允许前两种格式。

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

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

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

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

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


有人可以通过stackoverflow.com/questions/51657636/…帮助我。这对我们的团队来说是一个重要的问题,我们需要一些想法。
ankur

249

我无法正确地遵循其他答案,这里更多是假人指南...

您可以通过trunk -> branch或进行此操作branch -> trunk。我总是先在trunk -> branch那里解决所有冲突,然后再合并branch -> trunk

将主干合并到分支/标签中

  1. 签出分支/标签
  2. 右键单击分支的根| 乌龟SVN | 合并...
  3. 合并类型:合并一系列修订| 点击下一步' 在此处输入图片说明
  4. 合并修订范围:选择复制到分支/标记的中继目录的URL。输入要合并的修订,或将字段保留为空以合并所有修订。点击下一步' 在此处输入图片说明
  5. 合并选项:我只是将其保留为默认值| 点击“合并” 在此处输入图片说明
  6. 这会将修订合并到签出的分支/标签中
  7. 然后将合并的更改提交到分支/标签

4
我省去了“合并的修订范围”并做了“测试合并”。这就是我所需要的:范围是自动为我设置的(从完成分支到分支的最后一个修订版)
Lian

很好的答案-简洁易懂。它对我有用,但是当我只想合并一个配置文件时,由于某种原因,我不得不做两次。现在一切都很好。干杯
温格2014年

@Lian我做了同样的事情从主干合并到分支;如果要将主干文件的最新版本与分支文件合并,请将修订范围留为空白。
Winger

2
乌龟SVN的当前版本现在有一个选项,以合并所有版本,而不是离开修订范围的空白在第4步
未知的开发

1
@Onkar几乎总是会发生一些冲突。如果您有两个分支,例如trunkbranch,那么确保尽快合并从trunk到的任何更改branch将尽可能避免冲突。这意味着当您合并branchtrunk其中时,不应有任何冲突。
icc97

12

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

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

以相同的方式在主干中合并分支也是如此。

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


1

看看svnmerge.py。它是命令行,TortoiseSVN无法调用,但功能更强大。从常见问题解答

传统的Subversion可以让您合并更改,但不能“记住”您已经合并的内容。它也没有提供一种方便的方法来将更改集排除在合并范围之外。svnmerge.py使某些工作自动化,并简化了工作。Svnmerge还使用来自其合并的所有事物的日志消息创建提交消息。


6
svnmerge.py是在Subversion 1.4及更早版本上开发的。Subversion 1.5在核心产品中引入了合并跟踪。
Bert Huijben

0

右移并单击文件夹,然后选择TortoiseSVN->全部合并

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.