首先,git里面包含三个主要的对象:
①git对象--> blob类型
②树对象--> tree类型
③提交对象-->commit类型
一:git init
当我们使用初始化命令时,会在本地创建一个.git隐藏文件,就是git的版本库所在的位置
其目录结构为:
hooks:包含客户端或服务端的钩子脚本
info: 包含一个全局性排除文件
logs:用来保存日志信息
objects: 用来存储所有数据内容
refs: 用来存储数据(分支)的提交对象的指针
config:包含项目特有的配置信息
description:用来展示对仓库的描述信息
HEAD:只是目前被检测出的分支
index:(初始化是不存在的,当使用命令将代码添加到暂存区的时候会自动生成)
二:对一个文件进行简单的版本控制(使用底层命令)
注意:此时的操作只是对本地数据库进行操作(加到了objects目录下),还不涉及到暂存区
在git中文件名并没有被保存,只是保存了文件的内容
三:构建树对象(并塞入到暂存区)
命令:git update-index --add --cacheinfo 100644 加密键值 文件名
git write-tree
文件模式:100644 --> 这是一个普通文件
100755 --> 这是一个可执行文件
120000 --> 这是一个符号链接
--add选项:因为此前该文件并不在暂存区中
--cacheinfo选项:因为将要添加的文件位于git数据库中,而不是位于当前目录下
查看暂存区中内容命令:git ls-files -s
接上面命令继续执行:
注意:给暂存区添加记录只是在暂存区添加了一个记录,并没有将记录添加到数据库(objetcs中),当生成树对象时,会将树对象添加到数据库中,和git对象类似,可以这样理解:git对象是记录的文件的每个版本,树对象(就是项目的快照)记录的是项目的每个版本,使用git write-tree命令将暂存区内容写入数据库(objects)时,并不会将暂存区清空!
四。创建commit对象
注意:创建commit对象后也会将对象加入到本地数据库