git初始化后,我添加并提交了一些文件,做了一些修改,添加并提交。设置git守护进程(在WinXP上的Cygwin下运行)并克隆一次存储库。 现在,我得到这个错误与克隆的存储库:
$ git status
error: bad index file sha1 signature
fatal: index file corrupt
除了获得一个新的存储库副本之外,还有什么方法可以修复这个问题吗?
git初始化后,我添加并提交了一些文件,做了一些修改,添加并提交。设置git守护进程(在WinXP上的Cygwin下运行)并克隆一次存储库。 现在,我得到这个错误与克隆的存储库:
$ git status
error: bad index file sha1 signature
fatal: index file corrupt
除了获得一个新的存储库副本之外,还有什么方法可以修复这个问题吗?
当前回答
这听起来像是一个糟糕的克隆。你可以试试下面的方法来获取(可能吗?)更多信息:
git fsck --full
其他回答
这对我很管用。虽然我很好奇的原因,我开始得到错误在第一个地方。我昨天注销的时候,一切正常。今早登录时发现不是。
rm .git/index
git reset
如果混合使用不同的git版本,回购可能会被损坏。
新git版本所涉及的本地存储库与旧git版本不向后兼容。新的git回购看起来像旧的git版本(在我的例子中,git 2.28破坏了git 2.11的回购)。
更新旧的git版本可能会解决这个问题。
你可能不小心在你的项目根目录上用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文件夹。
你需要回到你的主回购。其中,删除。git/worktrees/<name_of_tree>/index
然后按照其他答案运行git reset。
如果问题是索引作为提交的staging区域(即.git/index),你可以简单地删除索引(如果你想要备份副本),然后将索引恢复到上次提交的版本:
在OSX/Linux/Windows(与Git bash):
rm -f .git/index
git reset
在Windows上(使用CMD而不是git bash):
del .git\index
git reset
(上面的reset命令与git reset——mixed HEAD相同)
你也可以使用底层的git读树来代替git重置。
如果问题出在packfile的索引上,你可以使用git index-pack来恢复它。