git文件存储原理解析(八)
1.git的目录结构
1.1 新建一个git-test空文件夹,使用git init 初始化,交由git管理
1.2 .git 目录下 文件夹结构如下:
2.git如何保存数据?
2.1.对象类型
从内部来看,Git 是简单的 key-value 数据存储。它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容。可以通过底层命令hash-object
来示范这点,传一些数据给该命令,它会将数据保存在 .git
目录并返回表示这些数据的键值。
tree对象
blob对象
commit对象
tag对象
对象之间关系:(参考git-scm.com官网图例)
2.2. 向git-test写入一个文件file.txt,观察.git目录下变化
对文件进行add --> commit 才会发现objects文件目录才发生变化,也就是说 git 在每次对本地版本库 进行commit的时候,就会对数据 进行一次保存,这是 会生成 commit对象,tree对象以及blob对象。Git 存储数据内容的方式──为每份内容生成一个文件,取得该内容与头信息的 SHA-1 校验和,创建以该校验和前两个字符为名称的子目录,并以 (校验和) 剩下 38 个字符为文件命名 (保存至子目录下)。
通过 cat-file
命令可以将数据内容取回。该命令是查看 Git 对象的瑞士军刀。
做些修改后再次提交,那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针。
我们使用命令行查看一下刚刚写入文件变化:
第一次commit file.txt
第二次commit file2.txt file3.txt
参考下面截图:
1).查看2次提交的commitId ,以及 git cat-file 命令使用
2).查看第一次commit tree blob 类型 及存储类容
3).查看第二次commit tree blob 类型及内容
2.3 分支以及对象应用关系如下:
相关博客:
1).Git 版本控制工具介绍(一)
2).Git 工作流程介绍(二)
3).Github的使用(三)
4).Git 常用命令(四)
5).Git 版本回退(五)
6).Git版本冲突解决(六)
7).git 分支管理(七)
8).git文件存储原理解析(八)