先上一张自己做的图:
git repo structure.png
(1)branch(分支)
分支是一个通过commit中的parent指针构建起来的单向链表。branch是由很多commit组织起来的。一个repo中有很多branch。
新建repo后都会有一个默认的分支,通常是master分支。分支的建立是基于当前的分支,新建的分支以当前分支的最新commit为parent commit。当一个分支合并到另一个分支的时候,会产生一个新的commit。新产生的commit会有两个parent commit,也就是说,一个commit会有多余一个的parent commit。如下图中的棕色轮廓的实心圆点。
branches.png
(2)commit(提交)
一个commit是当前repo的一个快照,每个commit都包含了提交这个时刻的所有的文件的状态。
commit.png
commit中比较重要的属性有:
- tree指针:指向一个tree对象,tree是一种文件目录结构。下面会详细讲。
- parent 指针:指向上一个commit节点。
- author :该commit的作者信息。
-
committer : 该commit的提交者。
(3)tree和blob(tree对象)
tree.png
我们可以把tree看作是一个目录结构。一个tree是一个文件夹,文件夹里面有文件夹和文件。blob这这里代表文件。
tree 是一个表格结构,每一行都代表一个tree对象或者blob对象,还有该对象的hash值即名字。tree的话就是文件夹名字,blob的话就是文件名字。通常以hash值为文件名的文件中只存储了文件的内容,而文件的名字要靠tree对象获取。
网友评论