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

Posted

技术标签:

【中文标题】使用 TortoiseSVN 如何将更改从主干合并到分支,反之亦然?【英文标题】:Using TortoiseSVN how do I merge changes from the trunk to a branch and vice versa? 【发布时间】:2010-09-22 21:13:52 【问题描述】:

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

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

从分支的工作目录运行:

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

将分支合并到主干

从主干的工作目录运行:

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

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

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

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

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

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

我的问题是:

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

编辑

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

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

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

【问题讨论】:

链接未找到! =/ 【参考方案1】:

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

您可以选择trunk -> branchbranch -> trunk。我总是先做trunk -> branch 修复那里的任何冲突,然后合并branch -> trunk

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

    签出分支/标签 右键单击分支的根 |乌龟SVN |合并... 合并类型: 合并一系列修订 |点击下一步' 合并修订范围: 选择您复制到分支/标签的主干目录的 URL。输入要合并的修订或将该字段留空以合并所有修订 |点击下一步' 合并选项:我只是将这些保留为默认 |点击“合并” 这会将修订合并到签出的分支/标签中 然后将合并后的更改提交到分支/标签

【讨论】:

我遗漏了“要合并的修订范围”并进行了“测试合并”。这正是我所需要的:范围是自动为我设置的(从分支完成到分支中的最后一个修订) 很好的答案 - 简洁易懂。它对我有用,但是当我只想合并一个配置文件时,出于某种原因,我不得不做两次。现在一切都好。干杯 @Lian 我做了同样的事情从主干合并到分支;如果您希望将主干文件的最新版本与分支文件合并,请将修订范围留空。 当前版本的 Tortoise SVN 现在可以选择合并所有修订,而不是在第 4 步中将修订范围留空。 @Onkar 有些冲突几乎总是会发生。如果你有两个分支,例如trunkbranch,然后确保尽快合并从 trunkbranch 的任何更改将尽可能避免冲突。这意味着当您将branch 合并到trunk 时,不应该有任何冲突。【参考方案2】:

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

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

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

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

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

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

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

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

【讨论】:

有人可以帮助我***.com/questions/51657636/…。这对我们的团队来说是一个重要的问题,我们需要一些关于它的想法。【参考方案3】:

你应该使用“合并一个修订范围”。

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

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

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

【讨论】:

【参考方案4】:

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

传统颠覆会让你 合并更改,但它没有 “记住”你已经合并的内容。 它也没有提供方便的 排除变更集的方法 合并。 svnmerge.py 自动化一些 工作,并简化它。合并 还使用 从它的所有事物中记录消息 合并。

【讨论】:

svnmerge.py 是在 Subversion 1.4 及更早版本上开发的。 Subversion 1.5 在核心产品中引入了合并跟踪。【参考方案5】:

Shift-右键单击文件夹并选择 TortoiseSVN -> 全部合并

【讨论】:

以上是关于使用 TortoiseSVN 如何将更改从主干合并到分支,反之亦然?的主要内容,如果未能解决你的问题,请参考以下文章

将分支中的更改合并到主干中

Tortoisesvn 跳过记录合并信息

TortoiseSVN 分支创建与合并

svn分支开发与主干合并(branch & merge)

SVN - 无法将分支合并回主干 - 许多树冲突

将分支合并到主干