【发布时间】:2017-12-30 18:21:01
【问题描述】:
今天我去将一个分支合并回一个旧分支,并被告知由于 case-folding 冲突我无法更新到原始分支。
我的 repo 看起来有点像这样:
- 默认分支,修订版 1:添加大多数文件。
- 默认分支,修订版 2:添加文件
xyz和XYZ。大概是在Linux机器上完成的。这是 2008 年的事了。 - 默认分支修订 3-35:各种其他更改,没有问题
- 修订版 36:添加了新功能分支
- 功能分支,修订版 71:在 Windows 上通知 Sourcetree 报告
xyz已删除,所以我提交了它,它变成了...... - 功能分支,修订版 72:这是明确删除
xyz和XYZ的更改
此时,我想将功能分支合并回默认值,但是当xyz 根本不在存储库中时,它不会让我更新回版本 71 或除修订版 1 之外的任何其他版本。显然,从 2 到 71 的每个变更集都被这 2 个文件“污染”了,我只能在我的 Windows 和 Mac 机器上检查为 1。
通常建议的解决方案 - https://www.mercurial-scm.org/wiki/FixingCaseCollisions - 不起作用:它说 “hg 状态应该显示状态为 'R' 的麻烦文件和状态为 '!' 的所有其他文件”,但是当我按照这些步骤操作时,它实际上会显示状态为“M”的所有其他文件,这显然不是我想要的,并且意味着如果我继续操作会发生一些数据丢失。
此外,我怀疑我永远无法在 Windows 或 MacOS 上执行所需的合并,因为我需要修订版 35 处于可用状态,然后才能将任何内容拉入其中。
有什么我可以在这里解决的吗?我所有的文件都是安全的,我也愿意丢失 xyz 文件中的所有数据和修订以使这个 repo 再次工作,但我真的不希望完全丢失 repo 和更改日志。
【问题讨论】:
-
您始终可以在具有支持文件名区分大小写的操作系统的 VM 中进行合并
-
我最终不得不这样做,除了在远程服务器上,因为我手边没有虚拟机功能。
标签: merge mercurial case-sensitive