接上一篇
3、refs文件夹
上篇说HEAD中文件的内容是一个引用。

ref: refs/heads/temp
:内容中的refs/是否指的是这个refs文件夹?
进入refs文件夹中查看一下:

(1)看到里边refs文件夹中有heads和tags两个文件。
tag :表示标签的意思。标签在很多书中也叫做里程碑*。
里程碑:就是项目开发到一定程度,有一个关键的成果了,比如开发到v1.0版本,可以针对v1.0版本这个commit,打上一个标签,标识这里是一个里程碑。
而这个目录叫tags,意味着Git仓库是可以有很多个标签。
heads:对应的就是分支。
分支:代表一个独立的开发空间,在不同的分支里边工作是互不影响的。当需要集成的时候,可以个多个分支集成到一个公共的分支上边去。
(2)进入到heads文件夹中查看
- 里边有两个文件,master文件和temp文件。

- 查看一下master文件

93342131af7c2d28f3461c45e683c62741135419
是什么东西?
他是一串Hash值,表示一个ID值。
通过$ git cat-file -t + 上边ID
查看它是一个什么类型。
注:ID值不用全部,唯一即可。

发现它是一个commit类型,说明这一串字符代表一个commit提交。
这个时候查看一下分支的信息
执行git branch -av
命令

发现master分支指向的就是我们上边查看到的commit,ID是9334213。
所以master文件存放的是master分支的指针,指向的是哪一个commit。
- temp文件同理。
这里在解释一下:
可以看到Git有长的ID值,有短的ID值,Git的处理方式是如果这个ID的hash值足以标志唯一性了,那么短一点没关系,如果出现重复了,Git不能识别短的ID值的唯一性的时候,就需要你输入更长一点的ID值。
这里需要总结一下:
.git目录下的HEAD文件所引用的是refs目录下中,heads目录里的文件。heads目录中的每一个文件代表一个分支。文件中的内容代表一个commit。
如下图:HEAD执行了refs/heads目录中的分支,分支指向了某一个commit。
关系图
这就是.git文件中HEAD文件和refs/heads/目录下文件的关系。
有点绕,慢慢理解。
网友评论