本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

报码:面向 Visual Studio 开发者的 Git 内部源代码(3)

时间:2017-07-13 12:40来源:668论坛 作者:www.wzatv.cc 点击:
虽然“查看修订记录报告”的消息列会指明每个提交的声明用途(由提交者在提交过程中提供),但毕竟只是注释而已。若要查看提交的实际更改,请右键

虽然“查看修订记录报告”的消息列会指明每个提交的声明用途(由提交者在提交过程中提供),但毕竟只是注释而已。若要查看提交的实际更改,请右键单击列表中的行,然后选择“查看提交详细信息”(见图 4)。

报码:面向 Visual Studio 开发者的 Git 内部源代码

图 4:存储库前两次提交的提交详细信息

第一次提交(标记 1)包含两个更改:.gitignore 和 .gitattributes(我在上一篇文章中介绍过这些文件)。 每个文件旁边的“[添加]”表明文件是被添加到存储库中。第二次提交(标记 2)不仅显示添加了 5 个文件,还将父提交对象的 ID 显示为可单击链接。若要将完整的 SHA-1 值复制到剪贴板中,只需单击“操作”菜单,然后选择“复制提交 ID”即可。

在文件系统中实现 Git 存储库:若要查看 Git 如何在存储库中存储这些文件,请右键单击解决方案资源管理器中的解决方案(而不是项目),然后选择文件资源管理器中的“打开文件夹”。在解决方案的根目录下,可以看到 .git 隐藏文件夹(如果看不到 .git,请单击文件资源管理器“视图”菜单中的“已隐藏项”)。.git 文件夹是项目的 Git 存储库。它的 objects 文件夹定义了 DAG: 所有 DAG 顶点以及所有顶点之间的全部父子关系都是通过文件进行编码,这些文件表示存储库中从原始顶点开始的每次提交(再次见图 2)。.git 文件夹的 HEAD 文件和 refs 文件夹定义了分支。让我们来深入了解一下这些 .git 项。

探索 Git 对象

.gitobjects 文件夹存储所有类型的 Git 对象:提交(对于提交)、树(对于文件夹)、blob(对于二进制文件)和标记(易记的提交对象别名)。

提交对象:现在,是时候启动 Git CLI 了。可以使用常用的任意工具(Git Bash、PowerShell 或命令窗口)。我将使用 PowerShell。首先,转到解决方案根目录的 .gitobjects 文件夹,然后列出其内容(图 5 中的标记 1)。可以看到,它包含许多以两个字符的十六进制值命名的文件夹。为了避免超出操作系统允许的文件夹内含文件数量,Git 将从所有 40 个字节的 SHA-1 值中删除的前两个字符用作文件夹名称,然后使用剩下的 38 个字符作为要存储的对象的文件名。举例来说,我项目中第一次提交的提交 ID 为 a759f283,因此对象所在文件夹的名称为 a7(ID 的前两个字符)。与预期一样,当我打开此文件夹时,看到了名为 59f283 的文件。请注意,这些以十六进制命名的文件夹中存储的所有文件都是 Git 对象。为节省空间,Git 使用 zlib 压缩对象存储中的文件。由于这种压缩会生成二进制文件,因此无法使用文本编辑器来查看这些文件。相反,需要调用 Git 命令,从而正确解压缩 Git 对象数据,并使用能够理解的格式来呈现数据。

报码:面向 Visual Studio 开发者的 Git 内部源代码

图 5:使用 Git 命令行接口探索 Git 对象

我已知道文件 59f283 包含一个提交对象,因为这是提交 ID。但有时会在 objects 文件夹中看到不知道是什么的文件。Git 提供 cat-file 底层命令来报告对象类型以及所含内容(标记 3)。若要获取类型,请在调用命令时指定 -t(类型)选项,以及 Git 对象文件名的几个惟一字符:

git cat-file -t a759f2

在我的系统中,此命令报告的值为“commit”,表明以 a759f2 开头的文件包含提交对象。虽然仅指定 SHA-1 哈希值的前 5 个字符通常就足够了,但也可以根据需要提供任意数量的字符(不要忘记添加文件夹名称中的两个字符)。使用 -p(优质打印)选项发出同一命令后,Git 会从提交对象提取信息,然后以清晰明了的格式呈现这些信息(标记 4)。

提交对象包含以下属性: 父提交 ID、树 ID、作者姓名、作者电子邮件地址、作者提交时间戳、提交者姓名、提交者电子邮件地址、提交者提交时间戳和提交消息(存储库中的第一次提交不显示父提交 ID)。每个提交对象的 SHA-1 都是根据这些提交对象属性中包含的所有值计算得出,这实际上保证了每个提交对象都有一个惟一提交 ID。

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容