Git版本库深入剖析

Git版本库深入剖析_第1张图片

图1.(git版本库结构图)

当然工作区和版本库(.git)是并列的关系。这里只研究版本库部分。


1.图中的各部分与版本库中的文件的对应关系。

index                    --> 暂存区
HEAD(refs/heads/master)  --> master游标分支,指向最新的commit
objects                  --> 对象库


2.几个有用的文件:

description  --> 对版本库的描述文件
config       --> 配置文件
logs         --> 这个很有用,记录的是各次commit的相关信息,作为历史穿梭的依据。


3.就上图的说明:

首先这里涉及到的几个对象有commit/tree/bolb三种,每种对象都会存在与之相对应的ID。

(1)首先,commit对象。

其中查看最新的commit。
Git版本库深入剖析_第2张图片图2


commit中包含tree对象,其中的parent也是commit对象,代表的是本次提交的父提交。关于对象类型可通过下面的方式查看:
Git版本库深入剖析_第3张图片图3


author是只得这个库的建立者。commiter当然就是本次的提交者。
进而研究下tree对象。
图4


这里只有一个文件,为了研究方便,新建branch进行研究。
Git版本库深入剖析_第4张图片图5


提交几个新文件进来,提交后查看tree对象。
Git版本库深入剖析_第5张图片图6


这里又可以发现tree中包含的是bolb对象,也就建立了一个目录树(这里注意的是,本文中所讲述的“包含”指的都是包含相应对象的ID,我们可以通过这个ID得到相应的内容)。如果你足够细心的话,你会发现上图中的各个bolb对象的ID是相同的,看来Git的优化已经十分好了,因为在上面的4个文件在创建时都是空的没有任何内容。
所以这里想要说明的就是commit中包含的tree就是对应本次提交的版本库中所含有的所有文件的一个索引。


(2)继续对图1进行进一步说明

其中的暂存区其实也是一个目录树,目录数中包含的同样是各个bolb对象的ID,这个ID所指向的内容和上述commit中包含的tree中ID指向的内容是一致的。
工作区中同样存在目录树,这样所建立起来的三个目录树就构造出了一个完整的组织方式,git status命令就是通过这些目录树的对比得到结果(没有验证)。


而使用在文章http://blog.csdn.net/u012150179/article/details/19409597中的各个命令的时候,有的是修改目录树,而有的却要操作bolb对象。


4.其它:

学习Markdown的可参考开源库:https://github.com/younghz/Markdown

你可能感兴趣的:(git,结构,版本库)