Git工作原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git工作原理相关的知识,希望对你有一定的参考价值。
参考技术A 按照官方文档的描述,Git是这样定义的.git目录是Git的核心,每一个变动都会存储在.git文件夹中,Git的相关命令本质上也是读取.git文件夹下的内容
.git目录下有几个重要的文件/文件夹
提交和文件是Git中的主要组成,也叫git对象,Git中的许多命令都和git对象有关
git对象分为下面3类
git对象存储在.git目录下的objects文件夹中,Git会将git对象压缩成二进制文件,git对象的文件名即sha-1算法得到的hash值,按照2/38的形式保存(前两位是文件夹的名称,剩下38位是文件名,这样做可以防止文件夹的内容过多,提高查找效率)
对于commit对象,hash值也被称为commitid
可以使用以下命令查看git对象中的内容
git cat-file -p <hash>
通过查看三种git对象的内容,不难发现如下的组织关系
其实可以吧hash看成每个对象的指针,Git通过指针将众多git对象串联起来,来实现对项目的版本控制
用户通过Git命令读写.git文件夹,达到获取信息或变更版本的目的
Git一开始被设计成供VCS使用的工具集合而不是一整套用户有好的VCS,它还包含了许多的底层命令,一般被称为plumbing命令(底层命令),而用户日常使用Git命令被称为porcelain命令(高层命令),porcelain命令实际是是对plumbing命令的封装
一次完整的提交过程会包含如下过程
使用porcelain命令的话是非常简单的
如果使用plumbing命令就会复杂很多,但是可以更好地理解其背后的工作原理
通过前文的内容不难发现,每次生成的commit对象会包含上一个commit对象的hash,即当前的commit包含上一个commit的指针,许多个commit对象串联起来就形成了分支
所以,Git的分支本质上是指向commit对象的可变指针
而HEAD代表当前commit的指向,.git/refs/heads/<branchname>文件的内容就是该commit对象的hash
以上是关于Git工作原理的主要内容,如果未能解决你的问题,请参考以下文章