使用 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 -> branch
或branch -> trunk
。我总是先做trunk -> branch
修复那里的任何冲突,然后合并branch -> trunk
。
将主干合并到一个分支/标签中
-
签出分支/标签
右键单击分支的根 |乌龟SVN |合并...
合并类型: 合并一系列修订 |点击下一步'
合并修订范围: 选择您复制到分支/标签的主干目录的 URL。输入要合并的修订或将该字段留空以合并所有修订 |点击下一步'
合并选项:我只是将这些保留为默认 |点击“合并”
这会将修订合并到签出的分支/标签中
然后将合并后的更改提交到分支/标签
【讨论】:
我遗漏了“要合并的修订范围”并进行了“测试合并”。这正是我所需要的:范围是自动为我设置的(从分支完成到分支中的最后一个修订) 很好的答案 - 简洁易懂。它对我有用,但是当我只想合并一个配置文件时,出于某种原因,我不得不做两次。现在一切都好。干杯 @Lian 我做了同样的事情从主干合并到分支;如果您希望将主干文件的最新版本与分支文件合并,请将修订范围留空。 当前版本的 Tortoise SVN 现在可以选择合并所有修订,而不是在第 4 步中将修订范围留空。 @Onkar 有些冲突几乎总是会发生。如果你有两个分支,例如trunk
和 branch
,然后确保尽快合并从 trunk
到 branch
的任何更改将尽可能避免冲突。这意味着当您将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 如何将更改从主干合并到分支,反之亦然?的主要内容,如果未能解决你的问题,请参考以下文章