Git如何存储树对象?

Jak*_*ake 5 git

我试图理解git如何存储树对象的确切格式.如何计算树对象的哈希值?

lin*_*ize 9

树对象

'tree' ' ' size_decimal '\0' tree_content
Run Code Online (Sandbox Code Playgroud)

对于tree_content中的每个条目

mode ' ' filename '\0' hash_20_bin
Run Code Online (Sandbox Code Playgroud)

mode:100644为常规文件,100755可执行文件; 040000:树; 120000:符号链接; 160000:gitlink

http://linquize.blogspot.hk/2011/10/supplemental-information-for-git.html


use*_*342 6

树对象在内部存储为包含条目列表的二进制对象(类型为"树",区别于实际文件).条目可以描述文件或另一个树(目录).每行包含条目名称,SHA1哈希值及其模式.可以在此处找到更详细的描述.

git ls-tree和这样的命令git cat-file -p将输出该对象的文本表示.这个文本形式是一个非常简单的转换:SHA-1以十六进制形式显示在条目名称之前,另外一列描述了它指向的对象类型("blob","tree"),只是为了清楚起见.

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