📜  Git – 对象模型

📅  最后修改于: 2022-05-13 01:58:11.114000             🧑  作者: Mango

Git – 对象模型

当我们使用 git 时,我们用来将存储库初始化为 git 存储库的第一个命令是git init 命令。使用该命令后,我们可以看到.git文件夹已创建。让我们深入了解该文件夹,看看我们在 .git 文件夹中有什么。

我们可以看到.git文件夹中有很多子目录,但我们要查看的子目录是.git/objects子目录。通常,objects 文件夹包含四种不同类型的对象——blob、tree、commit 和 tag

.git/objects目录现在是空的,但是我们会看到它的一些变化,我们会理解为什么这个目录对我们很重要。在 Git 中,每个提交、每个树和每个文件都作为哈希值保存在 objects 文件夹中。每个对象都有一个唯一的哈希值,可以帮助 Git 找到它所在的位置。相应地创建文件夹。随着我们前进,我们将了解哈希。由于objects文件夹现在是空的,让我们创建一个文件demo.txt并在里面写“Hello Geeks”

现在,让我们将更改添加到暂存区域并使用以下命令提交更改:

让我们观察这个命令之后对象文件夹中的变化。

所以我们得到了命名为 2 个字符长和 38 个字符长的文件名的新目录。

Git 为每个对象生成一个 40 个字符的校验和 (SHA-1) 哈希,该校验和的前两个字符用作目录名,其他 38 个字符用作文件名。

现在让我们检查这 3 个不同的对象及其类型。我们将使用命令——git cat-file

但是,我们需要的命令是——

  • git cat-file -t // 用于显示对象的类型
  • git cat-file -p // 用于显示对象的内容

让我们检查一下类型 我们的对象——

因此,我们得到的类型是——blob、tree 和 commit。让我们更详细地了解它们。

1. 斑点对象

Blob 存储文件的内容。每当我们提交文件时,创建的第一类对象就是 blob 对象。让我们看看我们的 blob 对象的内容——

我们可以看到我们得到了我们最初编写的文件 demo.txt 的内容,即Hello Geeks。

2. 树对象

树对象包含我们存储库中所有文件的列表,并带有指向分配给它们的 blob 对象的指针。让我们在下面的帮助下看看我们的树对象的内容——

Tree 对象中的每一行都有 -文件权限、对象类型、对象哈希和文件名。让我们打破界限 -

文件权限(100 644 ) - 644 的权限意味着文件的所有者具有读写权限,而系统上的其他用户只有读取权限。 blob 表示对象的类型。 40个字符的hash代表对象的hash。您可以使用您的 blob 哈希对其进行验证。 demo.txt 代表文件名。

3. 提交对象

Git 创建一个提交对象,该对象具有指向其树对象的指针。提交对象包含 -树对象哈希、父提交哈希、作者、提交者、日期和消息。让我们看看我们的提交对象的内容——

从上图中可以清楚地看出,提交对象由 -树对象、作者姓名、提交者姓名和提交消息组成。由于我们已经涵盖了 3 种不同类型的对象,因此我们只剩下一种,即标记对象。

4. 标记对象

标签对象包含对象名称、对象类型、标签名称、创建标签的人的姓名和消息。让我们使用 –

现在让我们检查我们的对象文件夹,看看是否创建了标签对象。

我们可以看到正在添加一个新目录“97”。现在让我们验证我们的类型并查看标签对象的内容。

我们可以看到标签对象正像我们预期的那样指向提交对象(使用我们的提交哈希值进行验证)。我希望你会发现这篇文章很有用。我们已经涵盖了所有四种对象类型,您可以通过进行一些更改并再次重复上述步骤来尝试更多。