UPDATE: see this post for a much simpler solution.
I recently came up against this one on a repository that I do a lot of work on. It is a .net project so my local repository was on Windows XP.
abort: case-folding collision between Feeds/web.config and Feeds/Web.config
I think it came about from creating a file, adding it to mercurial, pushing to a central repo, then at some point deleting the file and recreating it with a different case. I then commited the file which works ok locally because Windows doesn't care about case but once it is pushed to the remote repository which is a Linux box things change. Now trying to do a fetch results in the above error. At least I think that is what happened :-/
Anyway, after some hunting around the interweb I found a solution on the mercurial mailing list wiki, http://www.selenic.com/mercurial/wiki/index.cgi/FixingCaseCollisions. I include it here for my own benefit as much as yours
- make a repo with 'a' and 'A' on Linux- hg clone -U to Windows (actually Wine in my case)- cd - hg debugsetparents <bad_revision>- hg debugrebuildstate- hg rm -A A # mark missing file as deleted- hg ci -m"fix case collision"- hg manifest tip # confirm that the collision is gone- hg co -C tip # get a clean checkout
"The trick is to use debugsetparents and debugrebuildstate to get aworking directory that thinks its at the revision we can't check out.Then we record a deletion for the unwanted file. When we commit, commitwill only record the deletion we made via hg rm."