目录
Git对象模型
对象(objects)
- 类型:4种数据对象:blob,tree,commit,tag
- git cat-file -t 文件名(SHA1算法生成的序列)查看类型
- git cat-file -p文件名(SHA1算法生成的序列)查看内容
- 大小:对象数据内容的大小
- 文件名:如SHA1算法生成
SHA1对象数据
- 用40个字符的字符串用来表示对象名:目录(2个字符)+名(38个字符)
- 字符串由对象内容做SHA-1哈希计算得来
- 通过比较SHA-1值来比较两个文件的内容:快
不同类型的对象用途
- blob:存储文件数据,通常是一个文件
- tree:类似一个目录,用来管理tree和blob
- commit:指向一个tree,标记项目某个特定时间点状态
- tag:用来标记某一个提交(commit)
blob对象
- 对象内容全部是二进制格式数据
- 查看blobX件内容:
git show SHA1(完整序列化,记得加2个长度的目录名)
- 对象名:由哈希计算结果生成
- git cat-file -t 文件名(blob序列号)查看类型
- git cat-file -p文件名(blob序列号)查看内容
tree对象
- 包括:mode、对象类型、SHA1值、名字
- 一串指向blob或其它tree对象的指针
- 表示目录树的内容、内容之间的层次目录关系
- 查看tree对象内容
git ls -tree SHA1 git cat-file -p master^{tree} git cat-file-p SHA1
- git cat-file -t 文件名(tree序列号)查看类型
- git cat-file -p文件名(tree序列号)查看内容
commit对象
- 用来指向一个tree对象
- 组成
- 一个tree对象
- 父对象:一个项目必须有根提交
- 作者:修改人名字、日期
- 提交者:实际创建提交的名字、当期
- 一个提交本身并没有包含任何信息说明其做了哪些修改,所有的修改都是通过与父提交比较得来
- 提交commit对象
- 使用git commit命令提交
- 将存储在暂存区的index全部提交(生成tree)
- 提交的父对象为当前分支HEAD
- git cat-file -t 文件名(commit序列号)查看类型
- git cat-file -p文件名(commit序列号)查看内容 (git show commit序列号可直接查看内容)
Commit提交版本库库视图
- 可以反复通过:
- git cat-file -t 文件名(序列号)查看类型
- git cat-file -p文件名(序列号)查看内容
- 从commit对象查询到指向的tree,再通过tree查询指向的tree或者blob,最终查看到文件具体内容。
通过commit的序列号两种方式的查询案例
方式一
- 在.git中的objects目录下找到52的目录,并进入
- 通过git cat-file -t 文件名(序列号)查看类型 \ git cat-file -p文件名(序列号)查看内容 (序列号无需写全,七至八位即可)
- 用同样的方式继续追踪tree,直至blob
方式二
- 直接通过commit序列号进行查询
- 以上两种方式,加深对git对象模型的理解,以及commit对象,tree对象,blob对象之间的层次关系,以及objects存储文件快照。
查看每次提交做了哪些具体修改:git log -p
- 使用方向键上下滑动查看,按q退出
Git(Linux环境):Git对象模型(blob、tree、commit、tag)
最新推荐文章于 2025-02-02 14:09:54 发布