详解.git目录
剩下的四个文件很重要:HEAD
文件、(尚待创建的)index
文件,和 objects
目录、refs
目录。
它们都是 Git 的核心组成部分。
objects
目录存储所有数据内容;refs
目录存储指向提交对象的指针,包括:分支、远程仓库和标签等;HEAD
文件指向当前工作的分支;index
文件保存暂存区的信息。
objects目录
objects
目录用于存储Git中的所有对象。
可以看到在一个新的Git本地版本库中, Git 对 objects
目录进行了初始化,并创建了 pack
和 info
子目录,但均为空。
数据对象、树对象、提交对象、标签对象,均以单独文件的形式保存在 .git/objects
目录下。
虽然数据对象的内容几乎可以是任何东西,但提交对象和树对象的内容却有各自固定的格式。
Git中四个对象关系如下:
Pack文件夹说明:
Git有一个自我梳理的过程,如果Git仓库中松散的文件比较多的话,pack会对这些文件进行打包,打了包的文件是放在pack文件夹里边的。
Git 打包对象时,会查找命名及大小相近的文件,并只保存文件不同版本之间的差异内容。
refs目录
如果你对仓库中从一个提交(比如 1a410e
)开始往前的历史感兴趣,那么可以运行 git log 1a410e
这样的命令来显示历史提交记录,不过你需要记得 1a410e
是你查看历史的起点提交。 如果我们有一个文件来保存 SHA-1 值,而该文件有一个简单的名字, 然后用这个名字指针来替代原始的 SHA-1 值的话,会更加简单。
在 Git 中,这种简单的名字被称为“引用(references,或简写为 refs)”。 你可以在 .git/refs
目录下找到这类含有 SHA-1 值的文件。
.git/refs
目录内容如下:
L@DESKTOP-T2AI