1

当我们这样做时,第三列中的字符串是什么意思

$ git ls-tree HEAD

像这样

在此处输入图像描述

4

2 回答 2

1

我会假设它是 Git 存储库中给定树中包含的每个对象的唯一 40 字符 sha1 哈希 ID,尽管文档git ls-tree并没有真正说明这一点,并且仅将第 3 列称为<object>

输出格式

<mode> SP <type> SP <object> TAB <file>
于 2013-08-16T00:44:26.680 回答
1

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

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

git 保存了三种对象:提交、树和 blob。

您可以使用命令访问 git 存储的任何对象的内容git cat-file <hash>。例如,以下命令(-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以了解有关这一切的更多信息。

于 2013-09-04T03:49:04.523 回答