我曾尝试使用 LFS 在 Github 服务器上上传一个 1GB 的大文件。一切顺利。我认为,由于大型二进制文件不像源代码文件那样可跟踪,因此即使是很小的修改也会在推送后占用整个上传文件,因此每次推送的带宽使用量为 1GB。但是,一旦推送,我注意到它被视为源代码文件,因此由于更改很小,提交会在瞬间完成。这是怎么可能的?Git LFS 为何即使在大型文件上也能如此优化?
答案1
二进制 blob 仍然可以分解为任意数量的块,进行散列,然后与“已知良好”的副本进行比较。
因此,完全有可能导致大文件内部或附加内容的微小修改改变到与散列块大小相等的量。
这是一种类似于 BitTorrent 使用的系统的技术,适用于任何需要通过网络传输未知大小的文件的系统,在双方都尽量减少带宽使用的情况下可能已经有文件的某些部分。