代码之家  ›  专栏  ›  技术社区  ›  devoured elysium

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

git
  •  1
  • devoured elysium  · 技术社区  · 6 年前

    这在以下情况下很有用:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Edward Thomson    6 年前

    你不是。git并不是真正为处理大文件而设计的,它的存储机制显示了这一点。遗憾的是,即使是Git-LFS也帮不上忙。

    最终,这个文件将存储在一个packfile中 与相邻的blob进行delta压缩,但不能保证。

    你呢 能够 在中构建自定义存储后端 libgit2 ,添加对已知数据格式有效的机制。但是您将无法与命令行git兼容,因此对于大多数应用来说,这将是一个不幸的情况。

        2
  •  0
  •   kan    6 年前

    Git使用delta压缩来有效地打包blob。 https://en.wikipedia.org/wiki/Delta_encoding#Git