当我们做
时,第三列中的字符串是什么意思$ git ls-tree HEAD
喜欢这样
答案 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以获取有关所有这些的更多信息。