gitcat-file-t<objectid>如何判断对象的类型?

以下链接解释了 Git 如何计算对象 ID(ruby 代码片段)。对象类型(blob、tree、commit)编码在与内容连接的标头中,并在连接的字符串上计算 SHA1。

https://git-scm.com/book/en/v2/Git-Internals-Git-Objects

可以使用git cat-file -t <object id>来确定对象的类型(blob、tree、commit)。

我想知道鉴于 SHA1 是单向散列函数,此命令如何从对象 ID 中提取类型?

回答

“你把它倒过来拿着。”

虽然 SHA 确实是一种单向散列,但这不是问题:您自己提供散列,Git 将其用作键值数据库中的键,从而允许 Git 检索数据。(如果您提供散列的一部分,而不是整个内容,Git 会查找与该前缀匹配的键;如果前缀是唯一的,Git 会假定生成的匹配键是正确的键。)

获得数据(zlib 压缩对象)后,Git 现在只需要解压缩该数据的前几个字节。它们以四个对象类型字符串之一开头:blob, commit, tag, or tree(后跟一个空格,然后是大小和 '' 字节的十进制扩展在 ASCII 中)。

如果 Git 提取了整个对象——-t代码可以走捷径并提前停止解压——然后 Git 将验证通过哈希函数反馈的对象字节(包括标头),生成用于检索对象的密钥. 如果 Git 停止运行(就像它一样-t),Git 会跳过验证步骤。


以上是gitcat-file-t&lt;objectid&gt;如何判断对象的类型?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>