在git init
之后,我添加并提交了一些文件,进行了一些更改,添加并提交。设置git守护程序(在WinXP上的Cygwin下运行)并克隆一次存储库。现在,我在克隆的存储库中收到此错误:
$ git status
error: bad index file sha1 signature
fatal: index file corrupt
有没有办法解决这个问题,除了获取存储库的新副本?
rm -f .git/index
git reset
更多信息在https://www.chris-shaw.com/blog/quick-fix-for-git-corrupt-index
这很荒谬,但我刚刚重新启动了我的机器(mac),问题就像它从未发生过一样。我讨厌听起来像个支持者......
您还可以尝试还原到以前版本的文件(如果您使用的是Windows操作系统)
您可能在项目根目录上使用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
我有这个问题,我试着解决这个问题:
rm -f .git/index
git reset
但它不起作用。解决方案?出于某种原因,我在子目录中有其他.git文件夹。我再次删除那些.git文件夹(不是主体)和git reset
。删除后,一切都恢复了。
这对我有用。虽然我很好奇我最初开始得到错误的原因。我昨天退出时很好。今天早上登录,事实并非如此。
rm .git/index
git reset
由于上述解决方案给我留下了持续的问题,我使用了这个沉闷的解决方案:
诀窍。顺便说一下,我在项目根目录上做了一个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 / index中面临同样的问题重命名索引文件,然后git重置为我工作。