前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈Git的内部原理

浅谈Git的内部原理

作者头像
用户5521279
发布2020-01-22 09:35:13
5040
发布2020-01-22 09:35:13
举报
文章被收录于专栏:搜狗测试搜狗测试

浅谈Git的内部原理

前言

首先提前预祝各位同学元旦快乐,接下来进入正题。身为程序员的大家都知道,做技术一定知其然知其所以然,很多人都会用Git,但却对Git的原理却不是很了解,接下来带领大家简单的探秘下Git的原理。

Git目录结构

我们都知道无论是通过git init初始化,还是clone下来的一个工程,里面都会存在一个.git的隐藏文件。这个.git目录下也就是实现Git功能的相关文件。之所以设置为隐藏文件,也就是Git官方不想让用户操作这个文件。进入.git目录后,如图所示:

HEAD:Git仓库处于哪个分支。

config:当前Git仓库的配置和一些项目特有的配置。git remote add 添加的远程分支信息就保存在这里。

description:仅供GitWeb程序使用。

hooks:该目录用于配置客户端提交操作用于出发服务端的脚本,一般用于自动化部署。

info:该目录用于配置一些不希望被Git管控的文件。

objects:该目录用于存储所有数据对象内容。

refs:用存储Git本地以及远程分支的引用。

其实这里面还有文件Index,由于是个空仓库且暂存区里面没用内容,所以并没有Index生成。Index文件用于存储暂存区信息。

Git存储

Git是一个内容寻址文件系统,其核心部分就是一个简单的键值对数据库,可以向该数据库插入任何内容,会返回一个40位的字符串键,通过这个40位字符串可以在检索出插入的内容。

这里简单的介绍下什么内容寻址,其实就是通过SHA-1算法生成一个长度为40个字符的校验和,其实也就是key,然后根据这个key去得到文件内容,这种通过唯一标识key去获取我们的内容的操作就是内容寻址。

Git对象

在Git中有四种对象:

blob是具体的文件对象

tree是某个时刻提交目录的内容

commit执行一次commit就会产生一个commit对象

tag可以理解成commit的别名,一个tag对应一个commit

在Git的对象需要使用如下命令进行查看:

git cat-file-p对象hash值 查看对象的内容

git cat-file -t 对象hash值 查看对象的类型

git ls-files --stage 查看index文件内容

git hash-object 查看文件的hash值

首选创建一个test.txt文件,并提交到暂存区。通过git ls-files --stage查看index内容:

我们可以通过git cat-file -t e69de29bb2d1d6434b8b29ae775ad8c2e48c5391查看对象类型,如图是类型是blob。

然后我们在将暂存区的test.txt提交到本地仓库,并查看提交记录。

通过git cat-file -p commitid查看我们提交的内容。如图所示,是一个tree对象。

因此我们将一个本地文件提交到本地仓库,会产生一个blob对象、一个commit对象,一个tree对象。那么tag对象呢?别急,继续!

我们通过命令git tag -a tag1.0 -m "add tag"将上面的commit创建一个标签。在我们.git/refs/tags/目录下会新增一个tag文件,且内容是一个tag对象如图:

以上只是简单的说下Git的内部原理,感兴趣的同学想深入了解Git也可以参考Git官方文档:https://git-scm.com/book/zh/v2/

参考文献:

1、 https://git-scm.com/book/zh/v2/

2、 https://blog.csdn.net/haogangshang/article/details/88291045

3、 https://blog.csdn.net/ljk126wy/article/details/101064186

4、 https://www.cnblogs.com/jasongrass/p/10582449.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档