ChatGPT解决这个技术问题 Extra ChatGPT

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

我一直在阅读使用优秀且免费的 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(合并修订范围),只要我将修订范围留空。

没有找到链接! =/

i
icc97

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

您可以通过 trunk -> branchbranch -> trunk 的任一方式执行此操作。我总是先trunk -> branch修复那里的任何冲突,然后合并branch -> trunk

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

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


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

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

合并 sourceURL1[@N] sourceURL2[@M] [WCPATH] 合并 sourceWCPATH1@N sourceWCPATH2@M [WCPATH] 合并 [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH] 合并 --reintegrate SOURCE[@REV] [WCPATH]

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

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

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

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

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

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


有人可以帮我解决stackoverflow.com/questions/51657636/…。这对我们的团队来说是一个重要的问题,我们需要一些关于它的想法。
D
Davide Gualano

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

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

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

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


L
Liudvikas Bukys

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

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


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

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