无法使用Mercurial指南修复Hg案例折叠碰撞错误

时间:2012-05-29 18:05:42

标签: mercurial checkout case-sensitive case-insensitive

Mercurial修复案例折叠碰撞的指南是否存在问题,或者我实施解决方案的方式存在问题。

Mercurial wiki提供的解决方案如下:

hg clone -U repo repair
cd repair

hg debugsetparents <bad revision>
hg debugrebuildstate 
     

此时,Mercurial会认为您检查了错误的修订版   out和所有文件都丢失了(状态'!')。为了修复回购,我们   只需要这样做:

hg rm -A <file causing the collision> 
     

现在hg st应该显示状态'R'和其他所有的麻烦文件   状态'!'中的文件。现在我们可以检查我们的修复:

hg ci -m"fix case collision" 
     

要重新获取所有文件,我们只需再次结帐:

hg co tip

问题文件为:SomeFile.bashSomefile.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)。

1 个答案:

答案 0 :(得分:1)

尝试

hg update -C tip

那应该把文件带回来。如果没有,请尝试恢复所有内容:

hg revert -r tip -a