5

我试图了解 git 如何存储树对象的确切格式。树对象的哈希是如何计算的?

4

2 回答 2

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

于 2012-09-04T04:05:48.017 回答
6

树对象在内部存储为包含条目列表的二进制对象(“树”类型,将其与实际文件区分开来)。一个条目可以描述一个文件或另一个树(目录)。每行包含条目名称、它的 SHA1 哈希和它的模式。更详细的描述可以在这里找到。

命令git ls-treegit cat-file -p将输出此对象的文本表示。这种文本形式是一种非常简单的转换:SHA-1 以十六进制形式显示在条目名称之前,为了清楚起见,还有一个附加列描述了它指向的对象类型(“blob”、“tree”)。

它的散列被简单地计算为该内容的散列。由于它包含其组成部分的名称和散列,因此可以保证树散列在任何子树的散列发生变化时发生变化。

于 2012-09-04T04:07:21.823 回答