当前位置:首页 > 编程技术 > 正文内容

git 原理初探

yc8881年前 (2022-12-28)编程技术176

1. 前言


我使用的是 mac 系统,本文用到 treewatch 命令,mac 默认是没有这两个命令的,需要先安装下这两个命令

  1. brew install tree && brew install watch

2. git 是如何保存代码的


一、git 在 add 时,会将文件的内容通过Hash SHA-1算法生成一个基于Hash值的键值对数据库

参考 git 中文书籍git对象章节: https://www.progit.cn/#_objects

监听文件变化可使用命令(每隔一秒执行 tree .git 命令):

  1. watch -n -1 -d tree .git

创建 hello.txt 文件,文件内容: hello git

  1. echo 'hello git' > hello.txt

将文件添加到暂存区, 此时 .git/objects 下面会多出一个目录,这个目录下存放一个文件

git 会根据文件内容通过 hash sha-1 算法得到40位的 blob对象 hash字符串文件

示例: 8d0e41234f24b6da002d962a26c2495ea16a425f, 前两位作为目录名,后38位作为文件名进行存储

这个文件存储的就是 hello.txt 的文件内容: hello git, 下面就来验证这句话

  1. git add hello.txt

使用 cat 查看 hash 串存储的文件内容,看到是一串乱码,这个是文件经过zlib 压缩后的数据

  1. cat .git/objects/xx/xxxx

查看文件的原始内容,压缩前的数据:

语法格式: git cat-file -p 索引值前七位

cat: 可以理解查看 -p: pretty 漂亮的,理解为便于查看的

  1. git cat-file -p 8d0e412

查看文件类型,执行以下命令返回 blob 代表是 blob对象

  1. git cat-file -t 8d0e412

查看文件内容长度(例如: 10)

  1. git cat-file -s 8d0e412

3. hash 算法


hash算法: 将任意长度的内容通过算法生成固定长度的输出,也就是加密为固定长度的字符串

git 是一个基于Hash值的键值对数据库,键指的是hash索引值,值指的 hash索引值对应的文件内容

总结: git 的核心一个键值对数据库,里面有一种叫 blob 的数据对象负责存储压缩后的代码

具体算法,使用算法生成 hash 字符串

语法格式

  1. 'blob 长度\0内容'

使用示例

  • 10: 是文件的长度, 除了hello git 9个字符外, 还有一个\n, 所以长度为10
  • hello git 是文件的内容
  • sha1sum: 是Linux自带的计算Hash串的命令
  1. echo 'blob 10\0hello git' | shasum
  1. 注意
  2. 如果在windows下, 可能会得到不同的结果.
  3. 因为在windows下, 文件的末尾添加的是 CRLF 也就是 \r\n, Linux下只有 \n
  4. 因此, 可能会得出不一样的结果

4. 暂存区


暂存区所在位置: .git/index

暂存区可以看做一个文件名到 blob 对象的索引表,这也是为什么暂存区叫 index 的原因

查看暂存区中的数据

  1. git ls-files -s

本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!


从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!


本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。


本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。


若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。


本文链接:https://www.10zhan.com/biancheng/10291.html

标签: git
分享给朋友:

“git 原理初探” 的相关文章

【说站】laravel实现自定义404页面并给页面传值

【说站】laravel实现自定义404页面并给页面传值

以 laravel5.8 为例,虽然有自带的404页面,但太简单,我们更希望能自定义404页面,将用户留在站点。实现的方式很简单,将自定义的视图文件命名为 404.blade.php,并放到 reso...

【说站】用一句话就可以去除宝塔面板操作上的二次验证

【说站】用一句话就可以去除宝塔面板操作上的二次验证

用过宝塔的朋友应该都会发现,现在宝塔面板有些鸡肋的功能,删除文件、删除数据库、删除站点等操作都需要做计算题!不仅加了几秒的延时等待,还无法跳过!这时候就会有朋友在想,如何去除宝塔面板的二次验证,此篇文...

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

【说站】Centos8.0如何配置静态IP详解及永久关闭防火墙

这篇文章主要介绍了详解Centos8 配置静态IP的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来学习一下!1. 查看自己的网关地址点击虚...

【说站】利用Webhook实现Java项目自动化部署

【说站】利用Webhook实现Java项目自动化部署

用webhook就能实现Java项目自动部署,其实原理很简单。费话不多说,直接往下看教程。1. 创建gitee仓库并初始化2. 在linux安装git3. 在宝塔的软件的商店里下载Webhook4....

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

【说站】电脑安装MySQL时出现starting the server失败原因及解决方案

今天在安装MySQL时出现starting the server失败,经过查询分析得出以下结论,记录一下操作步骤。原因分析:如果电脑是第一次安装MySQL,一般不会出现这样的报错。如下图所示。star...

【说站】vagrant实现linux虚拟机的安装并配置网络

【说站】vagrant实现linux虚拟机的安装并配置网络

一、VirtualBox的下载和安装1、下载VirtualBox官网下载:https://www.virtualbox.org/wiki/Downloads我的电脑是Windows的,所以下载Wind...