0). git
本质
git
是一个内容寻址文件系统
git
核心部分是一个简单的键值对数据库,向数据库插入任意类型的内容会返回一个键值,通过此键值可以在任意时刻再次检索该内容
1). git
对象类型
所有的 git
对象都储存在 git 的对象数据库
git
以对象类型作为开头来构造一个头部信息,接着会添加一个空格,随后是数据内容的长度,最后是一个空字节。git
会把上述头部信息和原始数据拼接起来,并计算出这条新内容的 SHA-1
校验和(40 位),然后通过 zlib
压缩这条新内容,最后将经由 zlib
压缩后的内容写入磁盘文件(SHA-1
前两个字符作为子目录名称,后 38 个字符作为子目录文件的名称)
git
有以下对象类型:
blob
: 文件内容tree
: 目录。一个tree
对象可包含多个blob
或tree
commit
: 提交。commit
通常指向一个tree
对象,并保存了代码作者、提交信息、父提交引用等数据tag
: 标签,可以认为是一个永不移动的分支引用。通常指向一个固定的commit
对象