Git 的存储对象
27 July, 2014
去年读 Git Pro 这本书时,很难理解 Git 的四种对象模型 Blob、Tree、Commit、Tag,就直接跳过了。
今年用 Git 逐渐多了起来,且有了一丁点 Linux 基础,回头再看豁然开朗。Git 的存储方式真是既精妙、又简单。
Blob 对象
新文件纳入到 Git 后会被五马分尸,它的内容被扔到在一个 blob 对象中,它的对象名是基于内容运算生成的一个 40个字符的 SHA1值。
blob 没有文件名,只有内容。
Tree 对象
一个 tree 对象就是一大坨指针,指向:
- 其他 small tree(子级 tree)
- blob
可以把 Tree 对象想象为 Linux 文件系统中的目录,记录了子目录的信息、文件信息。
Commit 对象
一个 commit 对象由以下几部分组成
- 作者
- 提交者
- 注释
- 指向一个 big tree 的指针
还有一个 tag 对象,平时几乎不用,就先不写了。