修复mercurial 错误 —— abort: case-folding collision between XXX
这段时间在做平台移植,Mac下push版本到Windows后,我跑到Windows系统下update,Mercurial随即报错:abort: case-folding collision between XXX。
上网查了下资料,发现Mercurial版本库在大小写敏感和大小写不敏感的操作系统之间协同工作,就会出现这个问题。遇到这种情况可以参考Mercurial Wiki :FixingCaseCollisions
On Windows, it is currently (before Mercurial 1.1) possible to introduce case collisions in the repo that prevent you from checking out a repository.
One way to repair such a repository is to check it out on a case-sensitive Unix system, remove the problematic file, and commit it again.
If that's not possible, you can do the following:
hg debugsetparents <bad revision>
At this point, Mercurial will think you have the bad revision checked out and all the files are missing (status '!'). To fix the repo, we simply have to do:
hg remove --after <file causing the collision>
Now hg status should show the troublesome file in state 'R' and all other files in state '!'. Now we can check in our fix:
To get all our files back, we just check out again:
Or you can install the CaseFoldExtension and use this:
hg up --fold
最简单的解决办法:到大小写敏感的操作系统下删除重复的文件(目录),然后提交(提交前注意合并)。