Git object
数据是一个有向无环图,即从任何一个commit
出发都可以遍历其任何的parent
,但绝不会有环。每个commit
都指向一个tree
,而一个tree
则指向了一个或多个tree
和(或)blob
。
Git
数据模型如下图所示:
以下面目录结构为例:
工作目录下包含了两个目录和三个文件。初始化的git
数据模型如下:
当修改lib/base/base_include.rb
这个文件并提交以后,会产生一个新的blob
以及相应的新tree
。在当前commit
打出tag
以后,git
数据模型如下:
修改根目录下init.rb
文件提交后的git
数据模型:
可以看到,每次commit
都会产生一个新的tree
。
最后的git
数据模型如下图所示,包含了16
个不可改变的object
:
参考资料:
Git internals。