区域
1. 工作区(本地代码) 沙箱环境,可以随便修改
2. 暂存区 积累了一定的操作,但还没决定提交
3. 版本库 提交更改以后的版本
对象
1. Git对象
Key:val 组成的键值对
键值对是blob类型
**git对象是每个文件的映射**
2. 树对象
作用:能够解决文件名保存问题,也允许将多个文件组织到一起
<br>
构建树对象
通过**update-index**命令生成树对象
命令:
git update-index -add -cacheinfo 100644
<br>
100644, 普通文件
100755, 可执行文件
120000, 表示一个符号链接
<br>
-add选项:
因为此前该文件并不在暂存区中,首次需要-add
-cacheinfo选项:
因为将要添加的文件位于Git数据库中,而不是位于当前目录下,所以需要cacheinfo
**树对象是对每个项目的映射**
<br>
3. 提交对象
**提交对象是每次提交的映射**
初始化工作区
创建文件夹,初始化
git init
创建了.Git
1. hooks 钩子,包含客户端或服务端的钩子脚本
2. info 包含一个全局性的排除文件
3. logs 保存日志信息
4. **objects 目录存储所有数据内容**
5. **refs 目录存储指向数据(分支)的提交对象的指针**
6. config 文件包含项目特有的配置选项
7. description 用来显示对仓库的描述信息
8. **HEAD 文件只是目前被检出的分支**
9. **index 文件保存暂存区信息**
+ 向数据库写入数据 并返回对应键值
命令:
git hash -object -w -stdin
-w 选项指示 hash-object 命令**存储**数据对象;若不指定此选项,则改命令**仅**返回对应的**键值**
--stdin(standard input) 选项只是该命令从标准输入读取内容。若不指定,则需在尾部给出存储文件的内容
+ 查看Git如何存储数据
命令:
find .git/objects -type f
一个文件对应一条内容。校验的前两个字符是路径名
+ 根据键值拉取数值
命令:
git cat -file -p doqijwodjoqidjoqwiodoq
-p 选项指示该命令自动判断内容的类型,并为我们显示格式友好的内容
返回文件内容