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

时间:2011-09-29 09:54:00

标签: macos mercurial kiln

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

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

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

  • KILN的负责人
  • 我的本地仓库负责人,并更改了案例

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

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:5)

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

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

  • cp -r WeatherTimeMachine WeatherTimeMachineCopy

愚弄mercurial认为有问题的修订是当前的提示:

  • 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。

答案 1 :(得分:4)

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

答案 2 :(得分:4)

这是一个无编程的no-hg答案,但它一劳永逸地解决了我的情况折叠问题!现在无论如何..

我放弃了试图避免和“修复”案件碰撞问题。这看起来很丑陋,你永远无法真正“解决”这个问题,只能做一个解决方法。

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

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

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

答案 3 :(得分:2)

我们通过发出HG重命名命令而不依赖于区分大小写的文件系统来解决这个问题。假设你遇到麻烦,因为“Foo.txt”需要被称为“foo.txt”:

> hg rename Foo.txt Foo.txt.renamed
> hg rename Foo.txt.renamed foo.txt

我们在删除文件时遇到此问题,然后在主存储库中重新创建具有相同名称但不同大小写的文件。尽管已经从主存储库中删除了更改集,但是在这些更改之前创建的分支存储库无法合并。

答案 4 :(得分:0)

对于Mac OS X,对我来说有用的只是复制文件夹(重复作品 - cmd-D)并从新路径继续处理它。

答案 5 :(得分:0)

OSX同样我想克隆一个回购,我遇到了案例折叠错误阻止了我的顶级克隆。

如果存储库有多个提交,只需使用以下命令克隆早期版本:

hg clone -r 7

然后添加与.hgignore文件冲突的内容并进行更新。