135

我一直在阅读有关使用 Subversion 1.5 进行分支/合并的文章,使用优秀且免费的版本控制与 Subversion书。我认为我了解如何使用 Subversion 命令行客户端来执行我最需要的操作,它们是:

使用来自主干的更改更新分支

从分支的工作目录运行:

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

将分支合并到主干

从主干的工作目录运行:

svn merge --reintegrate 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 PATH

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

我的问题是:

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

编辑

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

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

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

4

5 回答 5

262

我无法正确遵循其他答案,这里有更多的傻瓜指南......

trunk -> branch你可以这样做branch -> trunk。我总是先trunk -> branch解决那里的任何冲突,然后再合并branch -> trunk

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

  1. 签出分支/标签
  2. 右键单击分支的根 | 乌龟SVN | 合并...
  3. 合并类型:合并一系列修订 | 点击下一步' 在此处输入图像描述
  4. 合并修订范围:选择您复制到分支/标签的主干目录的 URL。输入要合并的修订或将该字段留空以合并所有修订 | 点击下一步' 在此处输入图像描述
  5. 合并选项:我只是将这些保留为默认值 | 点击“合并” 在此处输入图像描述
  6. 这会将修订合并到签出的分支/标签中
  7. 然后将合并的更改提交到分支/标签
于 2013-03-27T12:31:24.833 回答
28

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

  1. 合并 sourceURL1[@N] sourceURL2[@M] [WCPATH]
  2. 合并源WCPATH1@N 源WCPATH2@M [WCPATH]
  3. 合并 [-c M[,N...] | -r N:M ...] 源[@REV] [WCPATH]
  4. 合并 --reintegrate SOURCE[@REV] [WCPATH]

1.5 之前的 Subversion 只允许前 2 种格式。

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

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

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

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

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

于 2008-11-18T17:44:45.913 回答
13

您应该使用“合并一系列修订”。

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

同样以相反的方式在主干中合并一个分支。

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

于 2008-11-18T16:02:42.157 回答
1

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

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

于 2008-11-18T17:59:21.483 回答
0

Shift-右键单击该文件夹并选择 TortoiseSVN -> Merge All

于 2016-11-02T18:03:41.300 回答