Git(Linux环境):Git对象模型(blob、tree、commit、tag)

目录

Git对象模型

对象(objects)

SHA1对象数据

不同类型的对象用途

blob对象

tree对象

commit对象

Commit提交版本库库视图

通过commit的序列号两种方式的查询案例

方式一

方式二

查看每次提交做了哪些具体修改:git log -p


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退出

猜你喜欢

转载自blog.csdn.net/baidu_41388533/article/details/108307962
今日推荐