Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修复Mercurial中失败的完整性检查?_Mercurial - Fatal编程技术网

修复Mercurial中失败的完整性检查?

修复Mercurial中失败的完整性检查?,mercurial,Mercurial,我只是在一个存储库上执行了hg pull,并引入了一些变更集。它说要运行hg update,所以我就这么做了。不幸的是,当我这样做时,它失败了,并显示以下错误消息: abort: integrity check failed on 00manifest.i:173! 当我运行hg verify时,它告诉我清单中没有的东西有很多问题(有一些轻微的路径模糊): 源存储库通过了hgverify测试 是否有任何方法可以从完整性检查失败中恢复,或者是否需要完全从源代码重新克隆存储库(在本例中这不是一个大

我只是在一个存储库上执行了
hg pull
,并引入了一些变更集。它说要运行
hg update
,所以我就这么做了。不幸的是,当我这样做时,它失败了,并显示以下错误消息:

abort: integrity check failed on 00manifest.i:173!
当我运行
hg verify
时,它告诉我清单中没有的东西有很多问题(有一些轻微的路径模糊):

源存储库通过了
hgverify
测试


是否有任何方法可以从完整性检查失败中恢复,或者是否需要完全从源代码重新克隆存储库(在本例中这不是一个大问题)?我该怎么做才能导致这种情况,这样我就不会再这样做了?

好吧,既然第一个损坏的变更集是170,您可以将本地存储库克隆到169,然后从源代码中提取。这意味着只需拉动5个变更集

hg clone -r 169 damagedrepo fixedrepo
cd fixedreop
hg verify
然后:

hg pull originalsource
至于手动恢复存储库损坏,我比我能做得更好。见第4节:

我曾经偶尔发现过腐败,尽管上面 文档说这通常是由于用户错误,我的实例在 具有空工作目录的可移动USB驱动器。有时事情 只是写得不正确或受到干扰:这是错误的 不总是用户错误。但我总是有多份我可以重新整理 从那时起,我就可以进行基本的修复了

如果部分本地克隆的简单修复和从服务器拉取无法修复,则在将更改(如果有)备份到捆绑包或修补程序后,您可以使用以下两种选项:

  • 手动破解Mercurial的文件
  • 从服务器执行新的完整克隆。通常这两种方法都比较简单和快速

注意:此方法将更改所有哈希。


实际上,当存储库损坏时,有另一种方法可以恢复它,如下所示-

您可以使用convert扩展完成存储库的完整重建。请参见第4.5节

首先通过将以下内容添加到~/.hgrc文件来启用转换扩展名

[extensions]
convert=
然后将不良回购转换为固定回购:

$ hg convert --config convert.hg.ignoreerrors=True REPO REPOFIX

当我突然发现清单中有丢失的文件时,这对我起到了作用——“错误255”。

我们最终做的是创建“中心”存储库的新副本,删除此副本中的.hg文件夹,在那里创建一个新存储库(hg init),然后将其作为中心存储库使用


但是,请注意,如果您不需要变更集历史记录作为参考(我们不需要),那么这只是一个合适的解决方案。您仍然可以使用旧的中央存储库进行此操作。

尝试从repo中删除文件
00manifest.i
,然后使用
hg remove 00manifest.i
hg commit
命令。为我工作。

我做了
hg克隆-r 169{crap}{new}
,其余的做了
hg pull
。当我运行
hg update
时,它在00manifest上得到了
中止:完整性检查失败。I:173再次。为了好玩,我还试着再往回走(165),但运气不好。克隆人在拉之前验证了吗?
验证
拉后是否产生与之前相同的输出?如果一次只拉取一个变更集,会发生什么情况?(当然,首先使用
incoming
)如果从源代码执行全新的克隆,会发生什么情况?:)169版验证成功,但我在
hg-incoming
上的完整性检查失败。拉取版本170和验证消息更改(“不在清单中”条目的子集,以及其中一个文件上的“缺少revlog”)。从源代码克隆工作正常。@帕特里奇:克隆前将Mercurial更新到最新版本。@tonfa:他们做到了。大多数情况下是因为2.5“我的希捷GoFlex硬盘有缺陷,所以我更换了它。偶尔开始,情况变得更糟。有几个例子也发生在加密闪存棒上。这则轶事的要点是,这是硬件故障,而不是用户错误。一天后重读它,我的时态可能会产生误导。解决这个问题的一个典型方法是做
del*.pdf*/s
,这也会清除.hg目录中的相关文件,这很糟糕。删除00manifest.i很容易,但你接下来做了什么?这对我来说非常有用!
$ hg convert --config convert.hg.ignoreerrors=True REPO REPOFIX