Git原理初探
一、Git存储对象
Git中有三种存储的对象,它们分别是blob,tree和commit,每一种的每一个对象都用SHA1算法对其内容进行计算得到一个哈希值key,作为其唯一标识。可以使用命令:
git cat-file -t <key>
git cat-file -p <key>
分别去查看这个对象的类型和内容。注意:直接使用cat命令是查看到是被git压缩后的内容。它们存储的位置在目录:.git/object下。
1.blob
blob对象是Git中占用空间最大的对象,因为其直接对应一个文件内容,注意不包括文件名,和文件权限。每使用一次git add 就会在git仓库中新增blob对象。Git会根据文件的内容生成一个key指向这个blob。其类型和内容显示方式分别如下:
你一定想知道,这个key值是怎么来的,不急,接着往下看~
2.tree
tree对象是指一次项目快照,项目快照是指一个文件列表,每个条目包含了文件的权限,类型,文件内容的hash值,文件名。这个hash就会指向一个blob对象。同样根据tree的内容生成一个唯一的key。
3.commit
commit对象是指一次提交,提交的内容包括了上一个commit,作者,提交人,提交log,签名。同样会根据提交的内容生成一个key指向它。
4.初看一次提交的过程
(1)初始化一个git 仓库