在Mercurial中破坏了revlog和orphan revlog - 如何修复?

Let*_*eto 9 mercurial

这是我在hg验证时得到的结果:

repository uses revlog format 1
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
 includes/base/class/ViewInstanceAdapter.class.php@7: broken revlog! (index data/includes/base/class/ViewInstanceAdapter.class.php.i is corrupted)
warning: orphan revlog 'data/includes/base/class/ViewInstanceAdapter.class.php.i'
158 files, 61 changesets, 270 total revisions
1 warnings encountered!
1 integrity errors encountered!
(first damaged changeset appears to be 7)
Run Code Online (Sandbox Code Playgroud)

我很长时间没有使用Mercurial,我不明白这意味着什么.

(我在使用TortoiseHg的Windows上,该项目仅限本地项目)

Lau*_*lst 6

如前所述(尽管您已经确认这不起作用),您应该首先尝试克隆存储库; 如果问题与dirstate有关,这可以绕过它.

接下来,每个克隆都包含一个完整的存储库,因此每个克隆实际上都是一个备份.你没有中央服务器或同事或其他本地副本吗?尝试克隆,然后从损坏的存储库中提取.由于第一个损坏的变更集被报告为否.7(在270中),这应该是一个非常古老的,所以很容易恢复,并希望损害不会阻止Mercurial超越它.

您可以尝试的第三个选项是在您的存储库(hg convert repo repo-copy)上运行Mercurial-Mercurial转换; 如果保持变更集ID完好无损,则应逐字转换,尽管它可能会遇到同样的问题.您还可以尝试指定文件映射以过滤掉ViewInstanceAdapter文件.

因为损坏的变更集太旧了,并且鉴于Mercurial使用仅附加写入方法,此问题的可能原因是硬件故障或某种随机磁盘损坏.

请注意,Mercurial不是备份系统,也不提供冗余.经常备份(在Mercurial的案例中就像'hg push'一样简单)是确保您不会丢失宝贵代码的唯一方法.

我觉得应该警告你的另一个原因是病毒扫描程序或Windows索引服务.这些锁定文件以某种方式阻止它们在短时间窗口中被删除.虽然Mercurial尽力保持稳健,但很难防范所有情况.建议将您的存储库列入白名单,请参阅此注释.