【发布时间】:2017-10-30 09:16:24
【问题描述】:
我使用 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 时我没有找到任何可以存储此类签名的东西)?
【问题讨论】:
-
索引文件完全存储它自己的 SHA1 签名,以便它可以检测到它何时被损坏。它是索引文件本身的预告片。许多进行双向同步的共享文件系统平台最终会破坏 git 存储库。不要使用它们。
-
@EdwardThomson 他们如何破坏文件?如果他们将文件作为一个整体同步,我认为签名将保留,并且不会破坏任何内容......
-
我不知道有关他们共享文件系统驱动程序的详细信息,以了解他们做错了什么。但从根本上说,它们是在模拟由 Windows NTFS 文件系统支持的类似 posix 的文件系统,感觉那里有很多锋利的边缘。
标签: git git-index shared-directory