如何解决“错误:糟糕的索引 – 致命:索引文件损坏”使用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:
- 克隆在其他地方的回购新的副本
- 将新鲜的.git目录复制到包含我想提交的更改的(破坏)回购中
诀窍了。 顺便说一句,我做了@hobs猜测项目的根。 学到了我的教训。
这对我有效。 虽然我很好奇,我开始得到错误的原因。 当我昨天退出时,情况很好。 今天早上login,事实并非如此。
rm .git/index git reset
这是荒谬的,但我刚刚重新启动我的机器(MAC),问题没有了,就像从未发生过。 我讨厌听起来像一个支持的人…
您也可以尝试恢复到以前版本的文件(如果您使用的是Windows操作系统)