git ls-tree HEAD - 第三列的含义

时间:2013-08-15 22:53:56

标签: git tree

当我们做

时,第三列中的字符串是什么意思
$ git ls-tree HEAD

喜欢这样

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为它是Git存储库中给定树中包含的每个对象的唯一40个字符的sha1哈希ID,尽管the documentation for git ls-tree并没有真正说清楚,只引用了第3列作为<object>

  

输出格式

<mode> SP <type> SP <object> TAB <file>

答案 1 :(得分:1)

第三列是您当前看到的树中包含的对象的键。

Git将它处理的所有信息存储在键值存储中,关键是您看到用ls-tree打印的哈希值或提交时创建的哈希值。

git保存有三种对象:提交,树和blob。

您可以使用命令git cat-file <hash>访问git存储的任何对象的内容。例如,以下命令(用于漂亮打印的-p)将打印提交对象的内容,该内容应与此类似:

> git cat-file -p HEAD
tree def456aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
parent f1ddfa625b139184e8b719fcb662e713a77fedcb
author Bob Foo <bob@foo.com> 1358366479 -0800
committer Bob Foo <bob@foo.com> 1358366479 -0800

The commit message.

在那里显示的树对象的内容(假定的def456...)正是您在使用git ls-tree HEAD时看到的内容。因此,如果您使用以下命令,您应该看到完全相同的输出:

> git cat-file -p def456aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# the same output as: git ls-tree HEAD

随着显示的哈希值,你可以继续这样做。如果将它与blob对象一起使用,它将打印文件的内容,如果将其与树对象一起使用,它将显示树的内容,这将是存储库中的子目录。例如,要查看可以使用的contact.html文件的当前内容:

> git cat-file -p 2271a9
# contents in contact.html

最后,请检查Git Internals - Git Objects以获取有关所有这些的更多信息。