即使一切看起来都是最新的,Subversion 合并也需要“旧式”?

Posted

技术标签:

【中文标题】即使一切看起来都是最新的,Subversion 合并也需要“旧式”?【英文标题】:Subversion merge requires "Old style" even though all seems up to date? 【发布时间】:2014-10-16 12:47:41 【问题描述】:

我最近从旧的 subversion 服务器/存储库迁移到最新版本 1.8.9。新存储库是在新服务器上从头开始创建的,旧数据是从头开始导入的(我们从旧存储库中签出代码,将其导出到本地以删除所有 SVN 绑定,并将其重新签入新存储库)。

一切看起来都很好。

我们已经使用新存储库几个月了。我最近去将一个分支合并到主干中。它引发了大量可怕的树冲突。我无法理解这一点。主干和分支应该是同步的(主干中的所有内容也在分支中,唯一的新代码是我们试图合并的分支中的代码)。出于完全的沮丧,我点击了Do reintegrate instead of automatic merge (old style)

现在点击合并成功了吗?!

为什么我不明白?有人解释为什么会发生这种情况和/或这两种合并类型之间有什么区别?似乎没有文档说明这意味着什么。

我能看到的唯一可能有点不寻常的是,我们在某个时候从主干合并到了分支(可能已经进行了一些“紧急”更改以生存)。

相关版本号:

subversion : 1.8.9
Tortoise: 1.8.8
Repository : V6

【问题讨论】:

1.8 合并并不意味着“树冲突已成为历史”——它们仍然可以自然地出现 我认为你错过了我的观点@LazyBadger。显然树冲突可能会发生,但为什么旧式合并阻止了这种情况的发生? 请显示两种类型的测试合并的输出(text/plain TSVN 输出类型)和分支修订日志(其中包含svn mv):未来树冲突的来源 我现在已经完成了合并。我必须把它放到分支中才能在截止日期前发布到源代码。我真的只想知道有什么区别?似乎没有关于这些选项含义的文档。 我在 TortoiseSVN 1.9.4 中遇到了同样的问题:单击“测试合并”会与自动合并产生冲突,但使用“旧式”重新集成合并会产生正确的结果。然后我发现:qaoverflow.com/question/… 表明从命令行自动合并工作正常。因此,我尝试在 TortoiseSVN 中单击“合并”(不先对其进行测试),而没有检查“旧式”重新集成,并且...它起作用了!因此,至少在 1.9.4 版本中,问题似乎仅限于“测试合并”预览功能。 【参考方案1】:

我想知道“旧式”之间的实际区别是什么 合并和“新风格”

TortoiseSVN 手册尚未更新以涵盖新的自动重新集成合并功能,并且当您明确指定您正在执行重新集成合并时仍然 contains instructions for the old workflow (the one called 'old style')。 TortoiseSVN 中新旧风格的区别如下:

    旧式 = svn merge --reintegrate。在 Subversion 1.7 和更早的版本中,您必须通过在命令行中附加 --reintegrate 选项来明确指定进行重新集成合并。

    新风格 = svn merge--reintegrate 选项在 Subversion 1.8+ 中已弃用。合并是否重新集成由 Subversion 客户端自动确定。不过,有 3 个先决条件——你的工作副本

    不能进行任何本地编辑, 不能切换路径, 工作副本不能是a mixed-revision one。

Subversion 1.8 发行说明中描述了新的自动重新集成合并:Automatic reintegration merge (--reintegrate option deprecated)。

SVNBook 1.8 | Reintegrating a branch 中也描述了该功能。您可以将章节与the SVNBook 1.7 version 进行比较,以了解 Subversion 1.7 和 1.8 版本之间的工作流程差异。

TortoiseSVN 1.7(“旧样式”)与 1.8(“新样式”)行为的差异were well summarized by Bob Archer in TortoiseSVN's users mailing list。

最好也解释一下为什么这会导致使用冲突 新样式不使用旧样式?

没有看到两次合并后工作副本的状态(有--reintegrate 和没有它),我很难说出当时发生了什么以及为什么指定--reintegrate 显式改变了行为)。我猜 SVN 1.8 未能检测到重新集成合并,所以你必须显式运行它。

【讨论】:

您能解释一下工作副本不能是混合修订版吗? @Liam Subversion 的概念性功能之一是工作副本可以包含具有不同版本号的目录和文件。 SVNBook 中有很好的解释svnbook.red-bean.com/en/1.8/…

以上是关于即使一切看起来都是最新的,Subversion 合并也需要“旧式”?的主要内容,如果未能解决你的问题,请参考以下文章

即使一切都是 unicode(python 2.7),ascii 解码错误

Linux学习闲谈 ——SVN用法及切版本与合版本

为啥我必须使用 set_charset("utf8") 即使一切都是 utf-8 编码的? (MySQLi-PHP)

linux下安装最新版Subversion 1.8.9

最新版本的 subversion 是不是处理了来自监视文件系统的 Windows 服务的“拒绝访问”错误?

Android Studio 说“ADB.exe 已过时并且存在严重的性能问题”尽管 SDK 工具说一切都是最新的