Mercurial 中止:索引 ... 已损坏

Posted

技术标签:

【中文标题】Mercurial 中止:索引 ... 已损坏【英文标题】:Mercurial abort: index ... is corrupted 【发布时间】:2011-05-26 18:23:24 【问题描述】:

尝试从生产存储库克隆时出现以下错误。

abort: index data/HR3/globals.php.i is corrupted!

在那之后,反复无常的立即对我放屁并且无法克隆。我尝试从生产仓库中删除有问题的文件,但失败了。我还尝试删除生产仓库中的 .hg 目录并重新添加和提交所有文件。这会产生相同的错误。

仅供参考,我正在尝试将我们应用的当前生产副本克隆到我们的测试服务器。我们的测试服务器在 Virtual Box 中运行。

更新

我通过删除全局文件,然后删除 .hg 目录并重新运行“hg init”和“hg add ”来解决此问题。和“hg 提交”。

现在我在尝试克隆时收到内部服务器错误。以下是我使用的克隆命令。

sudo hg clone http://10.1.1.25/ www

奇怪的是,mercurial 告诉我“真正的”网址是“10.1.1.25/HR3/index.php”,这绝对不是我的 mercurial 存储库。我不知道它为什么这样做。我检查了我的服务器日志,Apache 抛出了以下错误。

[Thu Dec 16 12:25:30 2010] [error] [client 10.1.1.102] PHP Parse error:  syntax error, unexpected T_STRING in /var/www/.hg/store/data/_h_r3/includes/_b_n_a_s/_b_n_a_s-_h_r_s201.php.i on line 22

显然克隆命令导致 Mercurial 启动 PHP 并使其尝试解析 Mercurial 数据存储中的某些内容?

分辨率

我怀疑这是因为我的存储库的根目录中有一个 index.php 文件来进行重定向。如果您尝试直接导航到我们网络上的 http:10.1.1.25,您将被自动定向到索引页面,而不是根目录中的 index.php 页面。不知何故,我认为这导致 php 启动并尝试解析 mercurial 商店中的项目。我已经通过 ssh 克隆解决了这个问题。

【问题讨论】:

您的标题有“Mercurial”,但您谈论的是“.git”文件夹。是哪一个? 哎呀,我的意思是.hg。我最近从 git 切换到 mercurial,所以有时我会感到困惑。我会编辑。 确保服务器和客户端的 Mercurial 版本相似。可能是您尝试从不了解存储库中某些内容的旧客户端进行克隆。 question1 - 你为什么使用 sudo?问题 2 - 你的 http 地址似乎不正确,应该是这样的:http://10.1.1.25/myProject - 没有空格。尝试在浏览器中输入您的网址,看看它是否真的有效 版本相同。我正在使用 sudo 以便 mercurial 可以创建它要克隆到的目录。如果我不这样做,它会抱怨权限,因为我的“工作”目录归根用户所有。事实证明,在我的项目的根目录中有一个 index.php 文件进行重定向。这会导致我的问题吗? 【参考方案1】:

您可以尝试这样做:

hg forget HR3/globals.php
hg commit
hg add HR3/globals.php
hg commit

【讨论】:

【参考方案2】:

我以前遇到过这样的错误。尝试运行

hg verify

在您损坏的存储库上。然后按照此处的说明进行操作:

http://www.softwareprojects.com/resources/programming/t-how-to-fix-mercurial-corrupt-repository-1926.html

【讨论】:

这是愚蠢的事情,我运行了 hg verify,它说一切都是 kosher。 你在哪里运行它?那应该在原始存储库上运行 我在原始存储库上运行它。我试图从中克隆的那个。真的很奇怪。 这真是令人困惑...您使用的是什么版本的 mercurial?是原装的 mercurial 还是 TurtoiseHG 随附的?您可以再次删除删除 .hg 目录并使用另一个 mercurial 提交所有文件吗? 我正在使用原始的 mercurial。我通过运行“apt-get install mercurial”得到它。【参考方案3】:

您似乎使用 static-http 方法从与您的开发项目所在的同一台服务器发布您的 repo。此方法仅在 Web 服务器不与 $URL/.hg 混淆的情况下才有效,您的服务器似乎这样做了。检查您是否可以在新文件夹中下载带有wget -r -np $URL/.hg 的.hg 文件夹,然后在此处运行hg verify

奇怪的是,mercurial 告诉我“真正的”网址是“10.1.1.25/HR3/index.php”,这绝对不是我的 mercurial 存储库。

我猜您的网络服务器会将一些反复无常的请求重定向到您的 index.php 网址。

【讨论】:

以上是关于Mercurial 中止:索引 ... 已损坏的主要内容,如果未能解决你的问题,请参考以下文章

如何中止mercurial中的合并?

mercurial 合并中止 3 个头

Mercurial https 克隆:“中止:错误:(...)错误的版本号”

Mercurial hg 克隆错误 - “中止:错误:名称或服务未知”

Mercurial hg子存储库问题 - “中止:未知修订版”

如何为 mercurial 用户创建别名?