1

我使用 VMWare 在 Windows 8 上使用 Ubuntu VM,在使用 git 时出现错误

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

当试图commit.

现在,我找到了解决此问题的方法(主要的方法,删除.git/index并重试,似乎有点解决方法),但我想了解导致此错误的原因(部分原因是它们往往以随机方式工作)。

~/我做了一个实验,并在(一个常规目录)和/mnt/hgfs/Shared with host/(与 Windows 主机的共享目录,这是我的笔记本电脑) 中运行了几个命令。

在常规目录中它完美地工作,但在共享目录中它失败并在提交消息中出现上述错误。

命令是:

mkdir trial
cd trial
echo hello > world.txt
git init
git add .
git commit -m "msg"

现在我想知道,为什么共享目录很重要?
一般来说,是什么导致了这个错误?与哪个 sha1 签名相比是索引文件(我没有找到任何可以在运行时存储这样的签名的东西tree .git)?

4

1 回答 1

0

Edward Thomson 的评论是正确的——您可以从错误消息和相应的源代码函数verify_hdr中看到这一点,其中包括以下几行:

git_SHA1_Init(&c);
git_SHA1_Update(&c, hdr, size - 20);
git_SHA1_Final(sha1, &c);
if (hashcmp(sha1, (unsigned char *)hdr + size - 20))
        return error("bad index file sha1 signature");

(魔术常数 20 是计算出的 SHA1 的字节大小)。

完全不清楚的是,在文件的共享中,是什么导致索引文件中的二进制数据被不当修改。但很明显它不当修改了,这种VMWare共享机制不适用于这种情况。

于 2017-10-30T14:54:14.797 回答