git - 为什么 Git 在 blob 文件中存储(和散列)blob 大小?

标签 git hash architecture blob

Git 的 blob 对象文件格式为 blob <size string>\0<data> 。 Blob 识别 SHA-1 哈希不是单独根据 Blob 内容计算的,而是根据 header 增强的 Blob 数据计算的(如上所述)。

作为一个纯粹主义者,我不喜欢那种架构。它将数据的通用属性(其 SHA1 哈希值)与一些特定于 git 的 header 混合在一起。

纯数据 blob 存储的另一个优点是可以使用“写时复制”将文件添加到索引,而不是复制整个文件。所需的空间可以减半,并且某些操作可以变得更快。

那么,为什么 Git 开发人员选择使用基于 header 的格式而不是纯数据格式呢?

附注AFAIK 在 Git 的早期,SHA-1 哈希是基于压缩数据的。

最佳答案

AFAIK in the early days of Git the SHA-1 hash was based on the compressed data.

是的,这会导致各种“优化”,例如 commit 65c2e0c, git 0.99, June 2015 :

Find size of SHA1 object without inflating everything.

但是“How does git compute file hashes?”中所示的新格式可以追溯到:

每次对数据本身执行任何操作都需要数据的长度。

关于git - 为什么 Git 在 blob 文件中存储(和散列)blob 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34425353/

相关文章:

git - 无法确定Java版本,Android Studio,Ubuntu 14.04

ruby - 从 ruby​​ 中的文件中检索哈希

php - 加盐密码安全

java - 如何正确使用 Struts ActionForms、Value Objects 和 Entities?

sql-server - Multi-Tenancy : What benefit does one-db-per-tenant provide?

git - Azure DevOps 单个 Repo 下的多个构建管道 使用 Git 时耗尽构建服务器内存

git - 为什么 Git 不默认为 "origin master"?

git - 如何知道 git 存储库中是否添加或删除了新目录

hash - 哈希函数是否自然存在?

c - 从C程序员的角度来看,ARM体系结构之间的差异?