Mercurial 的解决折叠式碰撞的指南是否存在问题,或者我实施解决方案的方式是否存在问题。
Mercurial wiki上提供的解决方案如下:
hg clone -U repo repair cd repair hg debugsetparents <bad revision> hg debugrebuildstate
此时,Mercurial 会认为您已签出错误的修订版并且所有文件都丢失了(状态为“!”)。要修复 repo,我们只需要做:
hg rm -A <file causing the collision>
现在 hg st 应该显示状态为“R”的麻烦文件和状态为“!”的所有其他文件。现在我们可以检查我们的修复:
hg ci -m"fix case collision"
要取回我们所有的文件,我们只需再次签出:
hg co tip
问题文件是:SomeFile.bash
和Somefile.bash
. 我最初有Somefile.bash
,我希望它现在是SomeFile.bash
。另外要注意的是,157版很开心,没有碰撞,但是158版是我介绍碰撞的地方。存储库的负责人目前处于修订版 160。
我已按如下方式实施此解决方案:
hg clone -U my-repo-url repair
cd repair
hg debugsetparent 160
hg debugrebuildstate
hg status (reveals that everything is 'missing' (!))
hg rm -A Somefile.bash (responds that SomeFile.bash has been removed, notice case change)
hg ci -m "Fixed the collision... I hope."
hg co tip
hg update -C tip
根据该指南,这应该消除了折叠箱碰撞并将其余丢失的文件带回来,但另一个hg status
显示所有内容仍然丢失(!)。
编辑:通过将最后一个命令( )附加update
到现有命令中,我能够恢复丢失的文件,从而解决了问题的其余部分。
注意:我必须使用最新的“问题”版本<bad revision>
来解决这个问题(在我的情况下是 160)。