Git说“致命的:被不稳定的对象源数据所迷惑”?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

只是为了好玩,我试图把大约85 GB的大部分-6MB的二进制文件到git。Git前进了一段时间,但总是在消息“致命:被不稳定的对象源数据混淆”之后的SHA 1中失败。你知道为什么吗?有办法解决吗?

提问于
用户回答回答于

  • 一个或多个文件在你的操作过程中被修改
  • 某些东西导致不一致的读取(例如,失败的硬件)。

短版本:git的开发人员并不打算将其用于易失性文件。

由于布局*Git用于“松散对象”以及它假设的有限的文件系统语义。**,Git必须知道新对象的对象名(SHA-1)的第一个字节(两个十六进制字符),才能开始存储该对象。

objects/[0-9a-f][0-9a-f]/目录。

**具体来说,它需要能够执行“原子”文件重命名。某些文件系统(通常是网络文件系统;特别是AFS,我相信)只有当重命名的源和目标位于同一个目录中时,才能保证重命名的原子性。

目前,git做两个sha-1的传递。档案。第一遍用于检查Git是否已经知道文件的内容(它的SHA-1对象名是否已经存在于对象存储中)。如果对象已经存在,则不会进行第二次传递。

对于新的内容(对象还没有在对象存储中),在压缩和计算正在压缩的数据的SHA-1时,会再次读取该文件。压缩数据被写入临时文件,该文件只有在初始的SHA-1(“已存储的?”Check)匹配后的SHA-1(压缩和写入的数据的散列)时才重命名为其最后的松散对象名称。如果这些SHA-1散列不匹配,则Git将显示您正在看到的错误消息并中止。此错误检查是在748af44c63第一次发布于Git 1.7.0.2。

用户回答回答于

还有一种可能性,即使是遥远的。这将是一个非常大的文件(例如,3或更多GB)--简单地说,git无法处理它。我们发现试图在包含巨大文件的结构中创建存储库时出错。

扫码关注云+社区