如何解决“错误:糟糕的索引 – 致命:索引文件损坏”使用Git时

git init ,我添加并提交了一些文件,进行了一些更改,添加和提交。 设置git守护进程(在WinXP上的Cygwin下运行)并克隆一次仓库。 现在,我得到这个克隆的存储库的错误:

 $ git status error: bad index file sha1 signature fatal: index file corrupt 

有什么办法解决这个问题,除了得到一个新的版本库?

如果问题是索引作为提交的临时区域 (即.git/index ),则可以简单地删除索引(如果需要,请创build备份副本),然后在上次提交时将索引还原到版本:

在OSX / Linux上:

 rm -f .git/index git reset 

在Windows上:

 del .git\index git reset 

(上面的reset命令与git reset --mixed HEAD相同)

你也可以使用低层次的pipe道 git read-tree来代替git reset


如果问题与packfile的索引有关 ,那么可以使用git index-pack来恢复它。

你可能会用你的项目根目录下的sed(重构或许?)意外地损坏.git / index文件,如下所示:

 sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr "$SEARCHPATERN" "$PROJECTROOT") 

为了避免将来出现这种情况,只需使用grep / sed忽略二进制文件:

 sed -ri -e "s/$SEACHPATTERN/$REPLACEMENTTEXT/g" $(grep -Elr --binary-files=without-match "$SEARCHPATERN" "$PROJECTROOT") 

这听起来像一个不好的克隆。 你可以尝试以下获取(可能?)更多的信息:

 git fsck --full 

在我的情况下,它是在web / ckeditor / kcfinder中嵌套的.git文件夹

 git status error: bad index file sha1 signature fatal: index file corrupt fatal: 'git status --porcelain' failed in submodule web/ckeditor/kcfinder 

我有这个问题,我试着解决这个问题:

 rm -f .git/index git reset 

但它没有工作。 解决scheme ? 出于某种原因,我有其他.git文件夹在子目录中。 我删除这些.git文件夹(不是主体),并再次git reset 。 一旦他们被删除,一切都再次运作。

当其中一个子目录下有一个.git目录时,可能会发生此问题。 要修复它,检查是否有其他.git目录,并删除它们,然后再试一次。

由于上述解决scheme给我留下了持续的问题,我使用了这个沉闷的解决scheme:

  1. 克隆在其他地方的回购新的副本
  2. 将新鲜的.git目录复制到包含我想提交的更改的(破坏)回购中

诀窍了。 顺便说一句,我做了@hobs猜测项目的根。 学到了我的教训。

这对我有效。 虽然我很好奇,我开始得到错误的原因。 当我昨天退出时,情况很好。 今天早上login,事实并非如此。

 rm .git/index git reset 

这是荒谬的,但我刚刚重新启动我的机器(MAC),问题没有了,就像从未发生过。 我讨厌听起来像一个支持的人…

您也可以尝试恢复到以前版本的文件(如果您使用的是Windows操作系统)