git 仓库内部结构

先上一张自己做的图:


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对象获取。

推荐阅读更多精彩内容

  • Add & Commit git init 初始化一个 Git 仓库(repository),即把当前所在目录变成...
    冬絮阅读 2,169评论 0 8
  • 主要内容介绍 1.设计思想 2.数据流向 3.git flow 4.其他介绍 5.思考讨论 6.参考资料 1.设计...
    小蜘阅读 538评论 0 13
  • Git 是一套内容寻址文件系统。很不错。不过这是什么意思呢? 这种说法的意思是,Git 从核心上来看不过是简单地存...
    逸尘颖晖阅读 41评论 0 0
  • Blob Object 10.1中说啦,git本质是一个内容可寻址的系统,所以Git的核心就是一个 key-val...
    老沈Rosen阅读 469评论 0 0
  • Git的学习 Git简介Git由Linux操作系统内核的创造者Linus Torvalds在2005年创造,是目前...
    DeepChafferer阅读 116评论 0 1