文件可以由git中的多个blob组成吗?

时间:2018-12-22 14:41:58

标签: git

我想知道git(至少在理论上)是否允许给定文件由多个blob组成。

这在以下情况下很有用:

commit-1: composed of big file F.
commit-2: edit on F, one line in its contents was edited.

如果发生这种情况,git可以将F的原始Blob分解为3个Blob,使commit-1指向这三个Blob(我们分别称为A,B和C),然后使commit-2指向Blob。 A,B'和C。在某些病理情况下,这可能会节省内存/磁盘空间中的千兆字节。

根据我对git树和blob的了解,git并不是以这种方式设计的。我想念什么吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您不是。 git并不是真正为处理大文件而设计的,它的存储机制证明了这一点。令人遗憾的是,即使Git LFS也无法在这里提供帮助。

起初,您的新文件将被写为一个松散的对象-这是一个zlib压缩的完整blob,即使它只是现有blob的1字节更改。

最终,此文件将存储在一个包文件中,在该文件中,可以 用相邻的blob对其进行增量压缩,但不能保证。

可以libgit2中构建自定义存储后端,并添加自己的机制来有效处理自己的已知数据格式。但是您不会与命令行git兼容,因此对于大多数使用来说这是不幸的情况。

答案 1 :(得分:0)

Git使用增量压缩有效地打包Blob。 https://en.wikipedia.org/wiki/Delta_encoding#Git

相关问题