如何解决Mercurial案例折叠碰撞?

MiK*_*iKL 5 macos mercurial kiln

我使用Mercurial作为源代码控制,在KILN上管理主存储库.在某个时间点,我将iOS项目名称从WeatherTimeMachine更改为weathertimemachine.这导致了几个文件和文件夹的大小写更改:

  • WeatherTimeMachine.xcode
  • WeatherTimeMachine_Prefix.pch
  • WeatherTimeMachine-的Info.plist

与此同时,我在KILN的修订版中添加了一个标签...所以我现在有:

  • 在KILN的头
  • 在我的本地仓库中改变一个案例

尝试合并时,我收到以下错误消息:"Mercurial case-folding collision"

我怎样才能解决这个问题?

MiK*_*iKL 5

我在这里找到了一些信息:FixingCaseCollisions,但不知怎的,这对我来说不起作用.以下是我设法解决此问题的方法:

制作现有存储库文件夹的副本(为安全起见).例如:

  • cp -r WeatherTimeMachine WeatherTimeMachineCopy

傻瓜认为有问题的修改是目前的提示:

  • hg debugsetparents <bad revision>
  • hg debugrebuildstate

删除导致问题的文件(强制删除需要-f).这是一个例子:

  • hg rm -A -f WeatherTimeMachine-Info.plist

删除所有有问题的文件后,提交更改

  • hg ci -m "fixed collision-folding issue" -u michael

然后将mercurial恢复到正确的版本

  • hg debugsetparents tip
  • hg debugrebuildstate

在此之后,合并是可能的,问题就消失了.

现在,我可以愉快地继续使用MacHg来管理我的Mercurial存储库并将我的更改集推送到KILN.


小智 5

如果您使用的是 Mac OS X,则无需按照 Mercurial 文档的建议将存储库导出到 Linux 或其他区分大小写的外国文件系统。只需使用磁盘工具创建一个区分大小写的日志磁盘映像,比您的存储库稍大,将您的存储库复制到那里,然后删除冲突的文件并提交。


frn*_*nhr 5

这是一个无需编程的答案,但它一劳永逸地解决了我反复无常的案例折叠问题!无论如何现在..

我放弃了避免和“修复”案例碰撞问题的尝试。这看起来很丑陋,你永远无法真正“解决”问题,只能采取解决方法。

真正解决问题的唯一方法(我能想到的)是使用区分大小写的文件系统。无需重新格式化整个磁盘,单个分区即可很好地完成这项工作。

我使用了操作系统附带的磁盘工具应用程序,非常简单,只需记住Mac OS Extended (Case-sensitive, Journaled)在创建新分区时选择即可。另请注意,磁盘工具只能通过移动分区的末尾(而不是开头)来调整分区大小。

您可以创建一个指向旧源代码所在位置的符号链接,因此无需更改 IDE 设置和其他内容(但我还没有尝试过这一点,只是对新分区感到满意)。