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

StackOverflow https://stackoverflow.com/questions/1115854

  •  12-09-2019
  •  | 
  •  

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

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

除了获取存储库的新副本之外,还有其他方法可以解决此问题吗?

有帮助吗?

解决方案

如果该问题是与指数作为提交暂存区(即.git/index),你可以简单地删除索引(做一个备份副本,如果你想),然后恢复索引版在最后提交:

在OSX / Linux的:

rm -f .git/index
git reset

在视窗:

del .git\index
git reset

(上述reset命令相同git reset --mixed HEAD

可以替代地使用较低水平水暖 git read-tree代替git reset


如果问题是与的指数为打包文件 上,则可以使用git index-pack恢复它。

其他提示

您可能不小心损坏了的sed你的项目的根(重构吧?)有类似的git的/索引文件:

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

我有这样的问题,我尝试TI解决与此:

rm -f .git/index
git reset

但它没有工作。的将溶液? 出于某种原因,我不得不别人子目录git的文件夹。我再次删除这些文件夹git的(而不是本金)和git reset。一旦他们被删除了,一切重新工作。

这为我工作。虽然我很好奇的原因,我开始摆在首位的错误。当我昨天退出,这是罚款。登录今天上午,事实并非如此。

rm .git/index

git reset

由于上述解决方案给我留下了持续的问题,我使用了这个乏味的解决方案:

  1. 在其他地方克隆存储库的新副本
  2. 将新的 .git 目录复制到包含我想要提交的更改的(损坏的)存储库中

成功了。顺便说一句,我做了一个 sed 正如 @hobs 猜测的那样,在项目根目录上。吸取了我的教训。

请注意对于git的子模块的用户 - 这里的解决方案将不会为你工作的,是

让我们假设你有一个名为dev父库,例如,你的子模块库称为api

如果你是api的内部,你会得到在这个问题提到的错误:

error: bad index file sha1 signature fatal: index file corrupt

index文件将不被一个.git文件夹内。事实上,.git甚至不会是一个文件夹 - 这将将与真正的git的数据的这个仓库位置的文本文档。可能是这样的:

~/dev/api $ cat .git gitdir: ../.git/modules/api

所以,与其rm -f .git/index,你需要这样做:

rm -f ../.git/modules/api/index git reset

或,更一般地,

rm -f ../.git/modules/INSERT_YOUR_REPO_NAME_HERE/index git reset

当存在子目录之一下方的.git目录可以出现此问题。为了解决这个问题,检查是否有其他git的目录存在,并删除它们,然后再试一次。

我正面临同样的问题,在重命名git的/索引的索引文件,然后GIT中复位工作我。

这是荒谬的,但我只是已经重新启动我的机器(MAC),问题就消失了喜欢它从来没有发生过。我恨听起来像一个支持的家伙...

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top