我使用Mercurial作为源代码控制,并在KILN上管理主存储库。 在某个时间点,我将iOS项目名称从WeatherTimeMachine更改为weathertimemachine。 这导致了几个文件和文件夹的大小写更改:
与此同时,我在KILN的修订版中添加了一个标签......所以我现在有:
尝试合并时,我收到以下错误消息:“Mercurial case-folding collision”
我该如何解决这个问题?
答案 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文件冲突的内容并进行更新。