场景1
最后更新于:2022-04-01 06:26:39
* 本场景命令: **git init**
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-12-28_5680dc6075a07.png)
* * *
* 在本场景中, 主人公新建了 `status.txt` 文件, `git add .` 后 objects 目录下多出一个文件,随后提交第一个commit,objects目录又多出两个文件.那么这多出的三个文件到底用来干什么呢???
* 其实这三个文件都是git对象,分别对应三种git数据模型 **blob**,**tree**,**commit**,其实还有第四种对象 **tag**.
* **blob** 对应我们仓库里的普通**文件**,当你将一份文件add到仓库里时,git将会为你产生一个blob对象存于objects目录下.
* **tree** 对应我们仓库里的一个**目录**,当你做一次commit时,git将会为你新增的目录产生tree对象存于objects目录下.
* **commit** 对应我们的一次**提交行为**,当你做一次commit时,git将会为你产生tree对象(若有新目录)的同时产生commit对象,存于objects目录下.
* 可以利用 `cat-file -t SHA-1-of-one-object` 查看一个对象的数据类型, SHA-1-of-one-object 的值为你看到一个objects下新增的文件的子目录+文件名
* 第一次提交后git的对象(blog,tree,commit)和引用(head,branch)间的关系组织如下图,图中已表明每一个对象和引用分别对应的事物