社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
首先,要理解git底层原理必须知道git的三个对象:blob、tree以及commit,所有对象存储在.gitobjects路径下
如图所示:
在这张图图中,git指针的概念就很清晰了,首先,当你commit之后,commit的指针就指向一个tree对象, tree对象存在文件的话,指针直接指向这个文件的blob对象,blob对象就指向了文件的内容,所以,add到暂存区跟commit到本地仓库的其实不是实体的文件,而是这三个对象。
关于分支的切换原理也就是指针指向的转换,在.gitrefsheads路径下,每个文件的名字就是分支的名字,文件的内容为commit_id,指向一个commit对象,git会自己维护这个HEAD指针,在git1.git目录下的HEAD文件,里面的内容就为.gitrefsheads的分支文件路径,如图所示,只需将HEAD指针指向不同分支即可。
总的来说,git将文件的各种元数据信息(文件名、大小、内容。。。)转化为三个对象进行存储,通过指针的方式,控制分支的切换及各个区域的回退。 (tip:git是基于元数据操作的,而svn则是基于文件操作的)。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!