我正在尝试理解git如何存储树对象的确切格式。如何计算树对象的哈希值?
答案 0 :(得分:9)
树对象
'tree' ' ' size_decimal '\0' tree_content
表示tree_content中的每个条目
mode ' ' filename '\0' hash_20_bin
模式:100644表示常规文件,100755可执行文件; 040000:树; 120000:符号链接; 160000:gitlink
表http://linquize.blogspot.hk/2011/10/supplemental-information-for-git.html
答案 1 :(得分:6)
树对象在内部存储为包含条目列表的二进制对象(类型为“树”,区别于实际文件)。条目可以描述文件或另一个树(目录)。每行包含条目名称,SHA1哈希值及其模式。 A more detailed description can be found here.
git ls-tree
和git cat-file -p
等命令将输出此对象的文本表示。这个文本形式是一个非常简单的转换:SHA-1以十六进制形式显示在条目名称之前,另外一列描述了它指向的对象类型(“blob”,“tree”),只是为了清楚起见。 / p>
它的哈希值只是作为该内容的哈希值计算的。由于它包含其成分的名称和散列,因此只要任何子树的散列发生更改,树形散列就会保证更改。