区域


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 选项指示该命令自动判断内容的类型,并为我们显示格式友好的内容

   返回文件内容