2009-07-12 81 views
442

git init之后,我添加并提交了一些文件,进行了一些更改,添加并提交。设置git守护进程(在WinXP上的Cygwin下运行)并克隆一次仓库。 现在,我得到这个错误与克隆库:如何在使用Git时解决“错误:错误索引 - 致命:索引文件损坏”

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

有什么办法来解决这个问题,比得到一个版本库的新副本等?

+0

是这在克隆的存储库中,还是在原始存储库中?克隆命令是否输出任何错误? – 2009-07-12 11:27:04

回答

884

如果问题是与指数临时区域提交(即.git/index),你可以简单地删除索引(作备份副本,如果你想),然后恢复索引版本的最后一次提交:

在OSX/Linux的:

rm -f .git/index 
git reset 

在Windows上:

del .git\index 
git reset 

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

,您也可以使用较低水平plumbinggit read-tree代替git reset


如果问题是指数packfile,则可以使用git index-pack恢复。

+25

我不小心在`:Gstatus`中做了一个`:w!`(来自fugitive.vim)。这个答案为我挽救了很多头发。 – 2012-02-29 17:46:22

+3

我知道我们不喜欢“我也是”消息 - 但是“我也是”。在Windows中相当于`erase/s .git \ index`,我也需要'erase .git \ index.lock`。 – 2012-06-15 07:23:53

+0

我不得不使用rm .git/index,因为我收到一个模棱两可的警告使用-f – 2012-07-16 21:43:10

12

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

git fsck --full 
68

您可能不小心损坏了的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") 
-6

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

6

我有这样的问题,我尝试TI与修复这个:

rm -f .git/index 
git reset 

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

9

在我的情况下,它被嵌套在网页/ CKEditor的git的文件夹/时,有一个.git目录一个子目录下kcfinder

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

可能出现此问题。要修复它,请检查是否有其他.git目录,然后将其删除并重试。

2

这对我有效。虽然我很好奇我开始在第一个地方得到错误的原因。当我昨天退出时,情况良好。今天早上登录,事实并非如此。

rm .git/index 

git reset 
2

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

  1. 克隆其他地方回购
  2. 的新副本复制到新的.git目录到(破)回购,包含我想要承诺的变化

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

-1

这很荒谬,但我只是重新启动了我的机器(mac),问题没有发生,就像从未发生过。我恨听起来像一个支持的家伙......

0

注意的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

相关问题