只是为了好玩,我试图将大约 85GB 的二进制文件放入 git 中,其中大部分大约 6MB。 Git 运行了一段时间,但总是在中途失败,并显示消息“fatal: confused by unstable object source data”,然后是 SHA1。你知道为什么吗?有什么办法可以解决吗?
最佳答案
要么
- 一个或多个文件在您的操作过程中被修改,或者
- 某些原因导致读取不一致(例如硬件故障)。
简短版本:Git 的开发人员并不打算将其用于 volatile 文件。
由于 Git 用于“松散对象”的布局* 和它假定的有限文件系统语义**,Git 必须知道第一个字节(两个十六进制新对象的对象名称 (SHA-1) 的字符),然后才能开始存储该对象。
<支持>*
objects/[0-9a-f][0-9a-f]/
目录。参见 gitrepository-layout
.
<支持>**
具体来说,它需要能够进行“原子”文件重命名。某些文件系统(通常是网络文件系统;特别是 AFS,我相信)仅当重命名的源和目标位于同一目录中时才保证重命名原子性。
目前,Git 对每个新 文件进行两次 SHA-1 传递。第一遍用于检查 Git 是否已经知道文件的内容(其 SHA-1 对象名称是否已存在于对象存储中)。如果对象已经存在,则不会进行第二遍。
对于新内容(对象不在对象存储中),在压缩和计算被压缩数据的 SHA-1 时第二次读取文件。压缩数据被写入一个临时文件,如果初始 SHA-1(“已存储?”检查)与后来的 SHA-1(被压缩和写入的数据的哈希值)匹配,则该临时文件仅重命名为其最终松散对象名称.如果这些 SHA-1 哈希值不匹配,那么 Git 会显示您看到的错误消息并中止。此错误检查已添加到 748af44c63 中在 Git 1.7.0.2 中首次发布。
关于git 说 "fatal: confused by unstable object source data",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423827/