【发布时间】:2012-08-28 16:24:59
【问题描述】:
我试图了解 git 如何存储树对象的确切格式。树对象的哈希是如何计算的?
【问题讨论】:
标签: git
我试图了解 git 如何存储树对象的确切格式。树对象的哈希是如何计算的?
【问题讨论】:
标签: git
树对象
'tree' ' ' size_decimal '\0' tree_content
对于 tree_content 中的每个条目
mode ' ' filename '\0' hash_20_bin
mode: 100644 用于常规文件,100755 可执行文件; 040000:树; 120000:符号链接; 160000: gitlink
表http://linquize.blogspot.hk/2011/10/supplemental-information-for-git.html
【讨论】:
树对象在内部存储为包含条目列表的二进制对象(“树”类型,这将其与实际文件区分开来)。一个条目可以描述一个文件或另一个树(目录)。每行包含条目名称、它的 SHA1 哈希和它的模式。 A more detailed description can be found here.
git ls-tree 和 git cat-file -p 等命令将输出此对象的文本表示。这种文本形式是一个非常简单的转换:SHA-1 以十六进制形式显示在条目名称之前,为了清楚起见,还有一个附加列描述了它指向的对象类型(“blob”、“tree”)。
它的哈希值被简单地计算为该内容的哈希值。由于它包含其组成部分的名称和散列,因此树散列保证在任何子树的散列发生变化时发生变化。
【讨论】: