在上一篇章节介绍过 Blob 物件与 Tree 物件後,接下来让我们认识 Commit 与 Tag 分别是什麽吧!
在我们使用 git add 指令加至暂存区时,会产生一个 Blob 物件,纪录档案的内容;而在执行 git commit 指令时,会发现除了新增 Tree 型态的物件来储存档名之类的东西,同时又有其他 SHA-1 杂凑值出现,让我们来看看这型态是什麽吧!
首先,我 git commit 了一个新的版本,可以看到 objects 目录内新增了两笔档案。
$ git commit -m"纪录讯息“
objects
目录内新增了两笔档案
让我们分别用指令查查看这两个档案的「型态」分别是什麽。
$ git cat-file -t [SHA-1 杂凑值(40字元)] #查看档案型态
-t
参数为用来查看档案的型态,-p
参数则是查看档案的内容。
讯息提示发现有 Tree 物件与 Commit ,由於在前面章节有介绍过 Tree 物件,那麽这里的 Commit 纪录什麽内容呢?这就是我们接下来要了解的 Commit 物件。
首先我们先看一下 Commit 物件的内容:
$ git cat-file -p [Commit 物件的 40 字元] # 查看物件内容
-t
参数为用来查看档案的型态,-p
参数则是查看档案的内容。
得到的提示会有:
tree e07ec1da62dfc5eaf8dee3964c2008eedaac7e35
parent dba939f16134c489b3d5ab198fd32cdc7db45e16
author cycChuyin <[email protected]> 1633096798 +0800
committer cycChuyin <[email protected]> 1633096798 +0800
update
分别纪录着:
parent
表示指向上一次的 CommitParent 关系决成了 Git 线图的线如何连接,除了作为起点的 Commit 之外,每个 Commit 都有 Parent,有时还会有两个以上的 Parent。
因为有 Parent 纪录前一个 Commit ,所有的 Commit 都可以串连起来,因此可以继续透过git cat-file
指令找到我们要的档案或是档名等等。
从上面结果来看,我们可以整理 Commit 、 Tree 、 Blob 之间的关系。
如果又提交一次 Commit ,则关系变化会是:
👉 整理目前为止的规则:
⚠️ 特别注意:Commit、Tree、Blob 都是除存在 .git/objects 里面,以 SHA1 当档名的二进制档案!
Tag 物件不会在我们执行 Commit 的过程中产出,而是需要透过我们手动把 Tag 贴在某个 Commit 上。
Tag 有分「轻量标签」与「附注标签」,这在後续的篇幅会介绍到。
首先让我们在某个 Commit 上新增附注标签:
$ git tag -a [Tag名称] -m"纪录讯息"
-a
参数为新增附注标签之意
此时在 Object 目录里会看到新增的档案:
让我们看看这个档案的型态跟内容分别是什麽呢?使用 git cat-file 指令搭配参数查看
$ git cat-file -t [SHA-1值] # 型态
$ git cat-file -p [SHA-1值] # 内容
Tag 回馈讯息一样包含了作者名称、新增的日期、Tag 标签名称,以及当时纪录的讯息。
但这里需要注意的是:
⚠️ Tag 物件并不是以 SHA-1 当档名的二进制档案,而是纪录着「Commit」的 SHA-1,并储存在 .git/refs 里面。
Tag 标签不会随着 Commit 新增而移动,他会固定指向那个 Commit
Git 四种物件的关系与执行指令时的关系:
参考文章:Git 原理入门
>>: ASP.NET MVC 从入门到放弃(Day27)-IIS 发布介绍
是我们今天要聊的内容,老样的,如果你已经可以轻松看懂,欢迎直接左转去看同事 Ken 精彩的文章 —...
文章内使用Unity 2019 LTS 目标 Bloom效果 Bloom 以下这张图片也是一个常见...
简介 本系列内容将会提及D3Js和资料相关内容的知识,主题订定为资料驾驭网页,其实一部分原因来自D3...
大家好! 相信各位都有看到标题了,今天开始就要实作函式库了。 我们进入今天的主题吧! jQuery ...
问题回答 元件里的 data 必须是函式是为了确保元件里的资料不会被别的元件资料所污染。如果 dat...