首页>兽药>正文
三分钟上手!一文看懂 Git 的底层工作原理
2023-08-17 11:23:10    来源:飞天小牛肉

这是一篇能让你迅速了解 Git 工作原理的文章,实战案例解析,相信我,3 分钟,绝对能够有收获!


(资料图)

Git 目录结构

Git 的本质是一个文件系统(很重要,记住这句话,理解这句话),工作目录中的所有文件的历史版本以及提交记录(commit)都是以文件对象的方式保存在.git目录中的。

我们先来创建一个名为 git-demo 空目录,并采用git init命令初始化 Git 仓库。该命令会在工作目录下生成一个.git目录,该目录将用于保存工作区中所有的文件历史的历史版本,commit,branch,tag 等所有信息。

$ mkdir git-demo$ cd git-demo$ git init

其目录结构如下:

图片

待会我们重点关注下这几个目录:

HEAD:工作目录当前状态对应的 commit,一般来说是当前 branch 的 head,HEAD 也可以通过git checkout命令被直接设置到一个特定的 commit 上,这种情况被称之为 detached HEADobjects:这里是真正保存 Git 对象的目录,包括三类对象 commit,tree 和 blob(具体这三类对象是什么,慢慢往下看就知道了)refs:用来保存 branch 和 tag 对应的 commitGit 三大对象

目前 Objects 目录中还没有任何内容,我们创建一个文件并提交:

$ git:(master) echo "my project" > README$ git:(master) mkdir src$ git:(master) echo "hello world" > src/file1.txt

添加并提交:

$ git:(master) git add .$ git:(master) git commit -m "init commit"

图片

从打印输出可以看到,上面的命令创建了一个 commit 对象,该 commit 包含两个文件。查看.git/objects目录,可以看到该目录下增加了 5 个子目录 06,3b, 82, c5, ca,每个子目录下有一个以一长串字母数字命令的文件:

图片

这一大串是什么?

Git Object 目录中存储了三种对象:Commit, Tree 和 Blob,Git 会为对象生成一个文件,并根据文件信息生成一个 SHA-1 哈希值作为文件内容的校验和,创建以该校验和前两个字符为名称的子目录,并以 (校验和) 剩下 38 个字符为文件命名 ,将该文件保存至子目录下。

可以通过git cat-file -t 哈希值命令查看对象类型,通过git cat-file -p 哈希值命令查看对象中的内容,哈希值就是目录名+文件名,在没有歧义的情况下,命令可以不用输入整个哈希值,输入前几位即可。

我们挨个看下:

065bca(blob):

图片

3b18e(blob):

图片

824244(tree):

图片

c5bc98(commit):

图片

ca96(tree):

图片

认真看图,大家看完也就差不多清楚了 commit、blob、tree 这几大对象是什么东西了

从 commit 对象(c5bc98)入手,commit 对象中保存了 commit 的作者,commit 的描述信息,签名信息以及该 commit 中包含哪些 tree 对象和 blob 对象。从上图可知包含了 tree 对象(ca96)。

可以把 tree 对象看成这次提交相关的所有文件的根目录,可以看到 ca96 这个 tree 对象中包含了一个 blob 对象(065bca),即 README 文件,以及一个 tree 对象(824244),即 src 目录。而 blob 对象存储的就是真正的内容。

这几个对象的对应关系如下图所示:

图片

Git Brach 和 Tag

现在来看下 HEAD 中的内容,前面说过,HEAD 中存储的是工作目录当前状态对应的 commit:

$ git:(master) cat .git/HEADref: refs/heads/master
$ git:(master) cat .git/refs/heads/masterc5bc98b8990bedd7444da537320559e601eba87b

c5bc98 正是我们最近的这次 commit!

master 是一个分支名,所以分支(branch)的本质是一个指向 commit 的指针

我们切一个新分支feat/work:

图片

查看下refs/heads/master和refs/heads/feat/work中的 commit 值:

图片

从其内容可以看到,feat/work 这个 branch 并没有创建任何新的版本文件,和 master 一样指向了 c5bc98 这个 commit。

从上面的实验可以看出,一个 branch 其实只是一个 commit 对象的应用,Git 并不会为每个 branch 存储一份拷贝,因此在 git 中创建 branch 几乎没有任何代价。

接下来我们在 feat/work 这个 branch上进行一些修改,然后提交:

$ git:(feat/work) echo "new line" >> src/file1.txt$ git:(feat/work) echo "do nothing" >> License$ git:(feat/work) git add .$ git:(feat/work) git commit -m "some change"

图片

查看当前的 HEAD:

图片

可以看到 HEAD 指向了 feat/work 这个 branch,而 feat/work branch则指向了 8a442 这个commit,master branch 指向的 commit 未变化,仍然是 c5bc98。

查看 8a442 这个commit对象的内容:

图片

可以看到commit 有一个 parent 字段,指向了前一个 commit c5bc98。还包含了一个 tree 对象(2a9dd):

图片

可以观察到,由于 README 没有变化,还是指向的 065bca 这个blob对象。License 是一个新建的 blob 对象,src 和 file1.txt 则指向了新版本的对象。

增加了这次 commit 后,Git 中各个对象的关系如下图所示:

图片

Tag 和 branch 类似,也是指向某个 commit 的指针。不同的是 tag 创建后其指向的 commit 不能变化,而 branch 创建后,其指针会在提交新的 commit 后向前移动。

关键词:

三分钟上手!一文看懂 Git 的底层工作原理

这是一篇能让你迅速了解Git工作原理的文章,实战案例解析,相信我,3分2023-08-17

海丰国际(01308)拟于9月14日派中期息每股0.6港元

智通财经APP讯,海丰国际(01308)公布,公司拟于2023年9月14日派中期息2023-08-17

鹿晗在武汉开唱,武汉公交定制线路转运3200余人次

鹿晗在武汉开唱,武汉公交定制线路转运3200余人次2023年8月11、12日晚2023-08-17

凯恩:图赫尔在转会过程起到重要作用 队友们不介意让我罚点球

直播吧8月17日讯拜仁新援凯恩在不久前接受了《德国天空体育》采访,谈2023-08-17

真三国无双5电脑版pc游戏安装包(附下载链接以及安装教程)

亲爱的朋友,你好我是白杨今天给大家分享一下:游戏真三国无双5的安装2023-08-17

中超第23轮焦点:大连人vs河南队,谁会输下“伯仲之战”?

上轮在主场凭借开场2分钟,科维奇操刀点球破门,攻入全场唯一进球,1:2023-08-17

蔓草荒烟(关于蔓草荒烟简述)

,你们好,今天0471房产来聊聊一篇草荒烟,草荒烟简述的文章,网友们对2023-08-17

tfodad 第92章:陨石将临

控制室中,她通过摄像头,看着里面的场景,天音有些愣神,那些绝望残党2023-08-17

传媒蓝皮书:“Z世代”和“银发”群体将成调适传媒发展关键因素

本文转自:中国新闻网中新网北京8月16日电(李京泽孙敏)《传媒蓝皮书:2023-08-17

原神派蒙主题礼盒3599元!OnePlus一加Ace 2 Pro 5G智能手机

京东商城现有OnePlus一加Ace2Pro5G智能手机原神派蒙主题礼盒,现价35992023-08-17

龙卷风亲历者:风声中夹杂着金属撞击声

龙卷风亲历者:风声中夹杂着金属撞击声(主题)8月13日晚,江苏盐城市2023-08-17

太罕见!刚又爆了,700亿大举抄底!

太罕见!刚又爆了,700亿大举抄底!,a股,个股,沪深,股票,etf,公募基金2023-08-17

台残障青少年演出舞台剧

据人民网报导,岛内知名的小可乐果剧团近日在台北演出儿童舞台剧《汤姆2023-08-17

丰台14家首批创业就业孵化点位街道挂牌

(记者王砯摄像王陆华)今天,丰台区最新区域孵化布局正式出炉,将借力2023-08-17

【南篱/黄金】你想不想,当个勇士?

2023 08 16周三文 南篱各位好,我是南篱,一个财经人。小黄现在只给了2023-08-17

水晶头盖骨图片_水晶头盖骨

1、玛雅人,传说共有13个,已经发现7个,用高纯度石英制成。本文到此讲解2023-08-17

8月16日中燃宁波地区燃料油价格平稳

生意社获悉,8月16日中燃宁波地区燃料油180cst自提低硫报价5450元 吨,2023-08-17

上工治未病 真心换真情

《黄帝内经》中提到:“上工治未病,不治已病,此之谓也。”山东省德州2023-08-17

乐山五通桥区:政企合作 现代化晶硅光伏产业体系加快建设中

四川经济网乐山讯(王琳璐记者蒋培路)日前,记者从四川五通桥经济开发2023-08-17

梁惠玲会见澳大利亚驻华大使傅关汉一行

16日中午,黑龙江省委副书记、省长梁惠玲在哈尔滨会见澳大利亚驻华大使2023-08-17

在岸人民币兑美元收报7.2904 下跌36点

在岸人民币兑美元8月16日16:30收盘报,较上一交易日下跌36点。(文章来2023-08-17

湘潭市委巡察组原组长文会龙被查

湘潭市委巡察组原组长文会龙接受审查调查湘潭市委巡察组原组长文会龙涉2023-08-17

摄影师自己拍的照片自己用被告侵权,视觉中国又上热搜!

15日晚间话题 自己拍的照片被视觉中国告侵权 冲上微博热搜榜自己拍的照2023-08-17

做自媒体过来人的肺腑之言,吐血整理出的经验!

一、2023自学时间线二、关于自学内容规划(1)Day1-Day5(打基础)明确自身2023-08-17

老虎是个耽耽 老虎是个耽耽

1、意思是像老虎要捕食那样注视着。2、形容贪婪地盯着,随时准备掠夺。2023-08-17