Git & GitHub 杂记: 从Blob、Tree、Commit、Tag到数据存储

导读:本篇文章讲解 Git & GitHub 杂记: 从Blob、Tree、Commit、Tag到数据存储,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

所有 Git 操作无非就是对 Git对象的操作,Git 对象包括 Blob对象、Tree对象、Commit对象和 Tag对象。

Blob 对象是一个二进制大对象,代表各个文件,存储所有文件除元数据之外的内容数据。 Gıt 仓库中以 SHA-1 值来标识 Blob,所以不按文件名寻址而是按内容寻址。

  • Bolb当然是在 git add filename之后创建的。

Tree 对象是一个二进制文件,代表各个目录,存储对 Blob对象和其它 Tree对象的引用(SHA-1 值),解决文件名的保存问题。Gıt 仓库同样以 SHA-1 值来标识 Tree。

  • 实际上,只需要 Tree 和 Blob 就能够保存 Git 仓库的当前状态,也就是 Git 快照。
  • 如果 Blob对象代表的文件没有变更,则所有 Tree对象始终通过同一个SHA-1 值保持对它的引用,否则变更导致 SHA-1变化时将更新 Tree对象所引用的SHA-1 值。效果就是,如果该文件没变更,后面所有版本的快照中都将引用该文件。
    在这里插入图片描述

Commit 对象是一个二进制文件,代表各个版本,存储对 Tree对象的引用(SHA-1 值)之外,还存储谁在什么时间以及为什么保存了某些快照等说明信息,解决快照的保存问题。Gıt 仓库同样以 SHA-1 值来标识 Commit。

  • 可以将 Commit对象视为链表的各个节点。 除第一个 Commit对象外,每个 Commit对象都有一个指向父 Commit对象的指针,一个 Commit可以有多个父 Commit,通过这些指针就能完成对提交的切换。
    在这里插入图片描述

Tag 对象是一个二进制文件,代表各个版本号,存储对 Commit对象的引用(SHA-1 值)以及指定给它的标签信息,解决 Commit对象的标注问题。 Gıt 仓库同样以 SHA-1 值来标识 Tag。

分支本质上是一个可变指针,是一个有名字的对 Commit对象的引用(SHA-1 值),分支始终指向最新提交,解决的是提交的分离与合并问题。

  • Git 默认分支名是 master。前段时间因为 BLM 改为“main”,但后来又提供了自由选择选项。
  • 分支看起来与标签 Tag 对象很像,只不过分支随着最新提交不断移动,而标签始终固定。
  • 合并的分支就是提交的提交,会产生合并点的提交拥有多个父提交的现象。

所以,Git 存储数据的过程大概是这样的:

  1. git add暂存文件后,创建 Blob对象和 Tree对象:
    在这里插入图片描述

  2. git commit提交暂存区后,创建Commit对象:
    在这里插入图片描述

3,多次提交后:
在这里插入图片描述
4,再打上标签v1.0:
在这里插入图片描述
5,分支的产生与切换:
在这里插入图片描述
6,在分支中工作:
在这里插入图片描述
在这里插入图片描述

7,合并分支:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98073.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!