oshin wordpress,网站优化用什么软件,三网合一网站模板,网站推广 英文#x1f680; 优质资源分享 #x1f680;
学习路线指引#xff08;点击解锁#xff09;知识定位人群定位#x1f9e1; Python实战微信订餐小程序 #x1f9e1;进阶级本课程是python flask微信小程序的完美结合#xff0c;从项目搭建到腾讯云部署上线#xff0c;打造一… 优质资源分享
学习路线指引点击解锁知识定位人群定位 Python实战微信订餐小程序 进阶级本课程是python flask微信小程序的完美结合从项目搭建到腾讯云部署上线打造一个全栈订餐系统。Python量化交易实战入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统
目录* 1、Commit对象介绍
2、Commit对象说明3、本地库中对象之间的关系4、总结5、练习6、本文用到的命令总结
1、Commit对象介绍
现在来介绍最后一种Git对象commit对象也叫提交对象。
提交对象可以理解为是对树对象的一层封装提交信息包括基于当前暂存区中索引文件生成的tree对象还有包含了提交时间提交者信息作者信息以及提交备注等内容更重要的是里面还包含了父提交的ID由此就可以形成Git提交的有向无环图。是链式的关系把所有commit对象关联起来
即commit对象通常指向一个 tree 对象并且封装了文件的提交时间提交者信息作者信息提交备注以及父提交引用等数据。
下面是commit对象的存储结构 2、Commit对象说明
我们通过练习来说明commit对象接着用前面Tree对象的本地版本库。
1创建一个commit对象
我们可以通过调用commit-tree命令创建一个提交对象为此需要指定一个树对象的SHA-1值以及该提交的父提交对象。 说明使用commit-tree命令来创建提交对象一般都需要和父提交进行关联如果是第一次将暂存区的文件索引数据提交到本地版本库那么该提交操作就不需要指定父提交对象。 1我们可以先查看一下此时Git本地库中的对象如下
bash
.git/objects/01/ab2a43b1eb150bcf00f375800727df240cf653 # 第三个tree树对象
.git/objects/0c/1e7391ca4e59584f8b773ecdbbb9467eba1547 # test.txt第二个版本blob对象
.git/objects/16/3b45f0a0925b0655da232ea8a4188ccec615f5 # 第二个tree树对象
.git/objects/83/baae61804e65cc73a7201a7252750c76066a30 # test.txt第一个版本blob对象
.git/objects/d8/329fc1cc938780ffdd9f94e0d364e0ea74f579 # 第一个tree树对象
.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 # new.txt第一个版本blob对象2我们通过第一个树对象创建一个commit对象
bash
# 1.做提交操作创建一个commit对象
LDESKTOP-T2AI2SU MINGW64 /j/git-repository/git\_learning (master)
$ echo first commit | git commit-tree d8329f
3ceba95d3cd9cce982d31e41e3b995ece72f755d# 2.确定该对象类型
LDESKTOP-T2AI2SU MINGW64 /j/git-repository/git\_learning (master)
$ git cat-file -t 3ceba95d3c
commit# 3.查看该对象内容
LDESKTOP-T2AI2SU MINGW64 /j/git-repository/git\_learning (master)
$ git cat-file -p 3ceba95d3c
tree d8329fc1cc938780ffdd9f94e0d364e0ea74f579
author sun\_wk 1618190880 0800
committer sun\_wk 1618190880 0800first commit说明
tree表示该commit对象所指向的tree对象的索引author表示该文件的作者。committer表示该文件的提交者。first commit这段文本是提交备注。备注与前面留空一行因为是第一次进行commit提交操作所以没有父提交信息。1618190880 0800表示时间一个时间戳。 即commit对象的格式很简单指明了该时间点项目快照的顶层树对象、作者/提交者信息从 Git 设置的 user.name和 user.email中获得)以及当前时间戳、留空一行最后是提交注释。 提示git commit-tree命令不但生成了提交对象而且会将对应的快照树对象提交到本地库中。 2创建第二个commit对象
根据第二个tree对象和第一个commit对象来创建第二个commit对象。
通过-p选项指定父提交对象。
bash
# 1.创建第二个commit对象
LDESKTOP-T2AI2SU MINGW64 /j/git-repository/git\_learning (master)
$ echo second commit | git commit-tree 163b45f0a09 -p 3ceba95d3cd9cc
60e1c209e9de87314ec47cf28e61de8df5362fe6# 2.查看该对象内容
LDESKTOP-T2AI2SU MINGW64 /j/git-repository/git\_learning (master)
$ git cat-file -p 60e1c209e9de8
tree 163b45f0a0925b0655da232ea8a4188ccec615f5
parent 3ceba95d3cd9cce982d31e41e3b995ece72f755d
author sun\_wk 1618193286 0800
committer sun\_wk 1618193286 0800second commit提交对象的格式很简单 它先指定一个顶层树对象代表当前项目快照 然后是可能存在的父提交 之后是作者/提交者信息依据你的 user.name 和 user.email 配置来设定外加一个时间戳 留空一行最后是提交注释。 第三个commit提交同上这里就不演示了。
3、本地库中对象之间的关系
我们可以查看一下此时Git本地库中的对象
bash
.git/objects/01/ab2a43b1eb150bcf00f375800727df240cf653 # 第三个tree树对象
.git/objects/0c/1e7391ca4e59584f8b773ecdbbb9467eba1547 # test.txt第二个版本blob对象
.git/objects/16/3b45f0a0925b0655da232ea8a4188ccec615f5 # 第二个tree树对象
.git/objects/3c/eba95d3cd9cce982d31e41e3b995ece72f755d # 第一个commit提交对象
.git/objects/46/ab608799a0e65e970b67b9b52f6c1407c39036 # 第三个commit提交对象
.git/objects/60/e1c209e9de87314ec47cf28e61de8df5362fe6 # 第二个commit提交对象
.git/objects/83/baae61804e65cc73a7201a7252750c76066a30 # test.txt第一个版本blob对象
.git/objects/d8/329fc1cc938780ffdd9f94e0d364e0ea74f579 # 第一个tree树对象
.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 # new.txt第一个版本blob对象可以从上面看到此时的本地版本库中共有9个对象三个blob对象三个tree对象三个commit对象。
他们之间的关系如下图 4、总结
提交是我们经常使用的Git动作每次提交操作都指向一个树对象同时会产生一个commit对象。 即一个commit对象包含了一个tree对象这个tree对象记录了在那个时间点项目包含了什么文件夹和什么文件。一个提交对象可以有一个或者多个父提交。每次commit操作都会基于当前索引文件index新建tree对象。那么当前索引文件是在上次提交的基础上更新来的所以每次提交产生的commit对象与其他的commit对象都有前后关系或者称为父子关系。对于我们来说不需要直接访问blob对象和tree对象我们直接访问commit对象就可以了。 即commit对象对应的tree对象下面又包含了小的tree对象和blob对象子的tree对象一层层展开最后叶子节点就是一个个blob对象也就是一个个文件。 到这里我们就能够清楚的了解什么叫一个Git版本。tree对象才是一次项目版本的快照提交对象是对tree对象的一次封装。 即 项目的快照就是一个树对象。项目的版本就是一个提交对象。 而且Git的每一个版本存储的不是增量而存储的是当前项目的快照。同时objects目录中相当于存放了项目的所有历史记录回滚就相当的方便了找到对应的commit对象的hash就可以了。 5、练习
请问下图中包含多少个tree对象和blob对象 一共包含两个tree对象一个blob对象一个commit对象。
说明
一个commit对象一定对应一个tree对象这个tree对象应该是一个完整项目仓库的快照doc目录下有一个blob对象也就是readme文件。
6、本文用到的命令总结
Git底层命令
git commit-tree生成一个commit对象。git cat-file -t 键查看Git对象的类型。git cat-file -p 键查看Git对象的内容。 参考 https://blog.csdn.net/songyuequan/article/details/85862415https://blog.csdn.net/jasongrass/p/10582465.html 1、Commit对象介绍 2、Commit对象说明 3、本地库中对象之间的关系 4、总结 5、练习 6、本文用到的命令总结 __EOF__ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jvX2J7TC-1651034561558)(https://blog.csdn.net/liuyuelinfighting)]繁华似锦的博客 - 本文链接 https://blog.csdn.net/liuyuelinfighting/p/16198051.html
关于博主 评论和私信会在第一时间回复。或者直接私信我。版权声明 本博客所有文章除特别声明外均采用 BY-NC-SA 许可协议。转载请注明出处声援博主 如果您觉得文章对您有帮助可以点击文章右下角**【[推荐](javascript:void(0)】**一下。