前面学习了GIT系统通过三种常用对象存储文本:blob对象存储文本内容,tree对象存储blob对象以及子tree对象,committer对象存储tree对象以及提交信息。我们只要知道最后一个committer对象的sha-1码就能找到其他所有的对象,GIT中通过一个文件来记录当前分支最后一次提交生成的committer对象的sha-1码;这个文件称为引用。即.git目录下refs/文件夹。.git/refs/文件夹下默然有两个文件夹:heads/和tags/下面学习下具体的含义。
1. refs/heads/和HEAD
既然知道最后的committer对象的sha-1码存储的路径,那么GIT系统只需要读取该路径下的文件内容即可。
在test-git仓库下,查看refs/文件夹下的内容:
$ find refs/
refs/
refs/heads
refs/tags
注意:基于.git目录下的命令。并没有发现存有sha-1码的文件。可以想想为什么没有?
这里通过echo命令创建一个新的引用来记录最后一个committer对象的sha-1码:
$ echo "f40e5e55c2492c5140db9036c688dc74770c63b5" > refs/heads/master
此时,我们可以通过这个引用(文件夹)来查找committer对象,而不是sha-1码:
$ git log --pretty=oneline master
f40e5e55c2492c5140db9036c688dc74770c63b5 (HEAD -> master) third commit