索引文件小于预期


80

今天早上,我开始从git收到此错误:

致命:索引文件小于预期

致命:git状态-瓷器失败

是否知道正在发生什么以及如何解决?



是的,我在发布之前尝试过。问题出在我的子模块不断破坏我的索引文件(不知道为什么)。
karellm 2012年

@karellm您是否知道为什么会这样?
crmpicco

不,老实说,我没有调查引起它的原因,并且它也停止了发生。
karellm 2015年

提示:根据我的经验,这可能是由于NFS文件夹未更新所致。如果您的存储库位于NFS上,请等待几分钟,然后再尝试解决问题。从一台机器上拉出,然后在另一台机器上检查状态后,两台机器都安装了相同的NFS,我得到了这个。
ggll

Answers:


105

索引文件已损坏,但是很容易重新创建。只需将其删除...

rm .git/index

然后,您可以重新添加您要暂存的文件。


如上所述,由于与子模块的冲突而无法正常工作,该子模块一次又一次地破坏了我的索引...我删除了子模块,删除了索引并全部添加。终于成功了。谢谢!
karellm'4

3
为什么会这样?在过去的两周中,我两次发生了这种情况,我看不出原因。
crmpicco

6
这对我不起作用。在出现此错误之前,我的工作副本大部分都是干净的。删除索引文件并运行之后,git add .它的行为就好像每个文件都是新文件并需要提交一样。
2016年

1
一个子模块不起作用。只需重置(答案下方)。
TimZaman

90

如果要保留本地更改,请使用以下命令:

$ rm .git/index
$ git reset HEAD .

> Unstaged changes after reset:
  modified foo.txt
  modified bar.txt

1
知道为什么会这样吗?在过去的两周中,我发生了大约4-5次。
crmpicco

1
这个答案是最好的答案。此外,如果您使用git子模块,请抬头:还要删除这些索引文件(它们位于中.git/modules/src)。这让我想知道为什么在删除(主)索引文件后仍然出现错误。
Graftak

我想这可能是出于标准原因,进程中途中断,磁盘空间不足等。尽管在我看来,我可能是使用git文件夹的符号链接来创建目录,以代替svn外在组件进行构建,尽管很奇怪,因为对这些存储库的唯一操作是只读的,以硬重置构建文件夹。
jgmjgm

1

对于那些即使在删除索引后仍然无法恢复的问题。如果要保留更改,请执行以下操作(不是解决方案,而是一个丑陋的解决方法!)。

  1. 备份您的文件,我要说的应该可以,但以防万一。
  2. 删除.git文件夹
  3. 克隆您的存储库(无论在哪里)我都是在当前目录中完成的
  4. 将克隆的.git目录中创建的副本复制到当前目录中
  5. 删除克隆的目录 6.可选,如果再次使用分支检出功能
  6. Git状态现在应该按预期跟踪更改,并且所有git命令都应该起作用

我的案子如上所述,git弄乱了它的引用……Git log显示“您的分支似乎已损坏”,git fsck并给我有关错误引用的警告。想通了我是否可以解决它,但我花了很多时间去做,所以我选择了丑陋的解决方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.