ChatGPT解决这个技术问题 Extra ChatGPT

在 Subversion 中将主干合并到分支

我使用的是 Subversion 1.4.6,现在无法升级到 1.5 版。

情况:

主干有很多结构变化(即主要是移动文件)。我有一个最近从主干合并的分支,但在重大更改之前。

将主干合并到分支的最佳方法是什么?

我的想法是:

首先小心地将分支合并到主干,只将分支中的修改文件合并到主干。将主干复制到分支。在不丢失分支历史的情况下执行此操作的最佳方法是什么?我应该弃用分支并创建一个新分支吗?

好吧,看来我没有给予 SVN 足够的信任。毕竟它足够聪明。我只是被“D”和“A”的输出推迟了,但在后台它做了一个动作。

问题和答案与非常旧的 SVN 客户端和服务器版本相关,与 SVN 1.5+ 尤其是 SVN 1.8+ 无关

S
Stefan

自上次合并以来,是否有什么阻止您合并主干上的所有修订?

svn merge -rLastRevisionMergedFromTrunkToBranch:HEAD url/of/trunk path/to/branch/wc

应该可以正常工作。至少如果您想将主干上的所有更改合并到您的分支。


当我干运行它时,许多文件都有很多“D”和“A”,因为文件在后备箱中移动。我的问题是 SVN 在这种情况下是否记得文件的历史记录。
在主干中移动文件时是否使用了 svn rename ?如果你这样做了,历史应该会保留。我认为你应该在小范围内尝试这个 - 创建一个新的存储库,一个带有单个文件的主干,一个有更改的分支,在主干上执行 svn 重命名并检查历史记录是否存在。
我如何知道从主干合并到分支的最后一个修订版是哪个?
在较新版本的 svn 中,它存储为文件属性(某处?,可能是根目录)。旧版本不存储此信息,您必须手动搜索它。即在日志中搜索最后一次合并的提交。 (这是一个很大的不便。Git、Mercurial、Bazaar 没有这些限制)
此处提供了一个很好的指南:stereointeractive.com/blog/2009/02/17/…
c
cbuchart

可以通过在工作副本目录中运行以下命令来找到从主干合并到分支的最新修订:

svn log -v --stop-on-copy

这只是在创建分支时停止日志;它没有显示在那之后发生的任何合并。
因为,有了@moswald 的一点警告,知道这可能非常有用。我没有看到问题。我通常没有长寿命的树枝(最多一周),所以我通常只在重新整合之前从树干中拉出。
M
Markku

这是指定要合并的修订范围的“老式”方式。使用 1.5+,您可以使用:

svn merge HEAD url/of/trunk path/to/branch/wc

我正在使用 1.6.11,它让我进入了一个范围。
有必要说这么多吗?工作副本中的 'svn merge /url/of/trunk' 有什么问题?
svn:E195002:无效的合并源'HEAD';工作副本路径只能与存储库修订版(数字、日期或头)一起使用
@Solo HEAD 确实需要您指定修订号,但不再需要使用 HEAD。正如 GreenAsJade 所提到的,“svn merge /url/of/trunk path/to/branch/wc”对我有用。
应修改答案以删除“HEAD”