Git是如何将多个文件合并成一个哈希值的?

据我理解,Git 对文件进行哈希处理的方式如下(以 Lua 举例,我有一个称为 sha1 的函数可以计算 sha1 哈希):

sha1("blob "..filesize.."\0"..content)

我的问题是,Git 是如何将这些个体哈希组合成一个哈希的?具体来说,我想计算 Git 存储库的最新提交的哈希(在 GitHub 上),以验证本地存储库副本是否与 GitHub 上的相同,同时仍允许人们修改代码。

Git 是将哈希连接在一起然后再哈希,还是采用其他诡计?据我所知,“最新提交”哈希值只是存储库内容的哈希值,因此我可以查看是否匹配我的文件。这是真的吗?

点赞
用户1290731
用户1290731

blobs是二进制大对象,树是通过嵌入所包含的blobs和树和提交的哈希代码来引用它们的,所以树的哈希是哈希的哈希,提交会嵌入它的(顶层)树的哈希以及任何父提交的哈希,等等。

获取zlib并构建其zpipe示例,这将使您可以直接转储每个存储库对象的内容(或者使用git cat-file可以完成相同的操作,但没有类型/长度/零头)。

2014-05-04 15:26:12