Git如何存储树对象?

时间:2012-09-04 02:58:00

标签: git

我正在尝试理解git如何存储树对象的确切格式。如何计算树对象的哈希值?

2 个答案:

答案 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-treegit cat-file -p等命令将输出此对象的文本表示。这个文本形式是一个非常简单的转换:SHA-1以十六进制形式显示在条目名称之前,另外一列描述了它指向的对象类型(“blob”,“tree”),只是为了清楚起见。 / p>

它的哈希值只是作为该内容的哈希值计算的。由于它包含其成分的名称和散列,因此只要任何子树的散列发生更改,树形散列就会保证更改。