1

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.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)。

4

1 回答 1

1

尝试

hg update -C tip

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

hg revert -r tip -a
于 2012-06-06T22:47:08.673 回答