IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Git存储原理——Git对象 -> 正文阅读

[开发工具]Git存储原理——Git对象

初始化仓库

首先在了解什么是Git对象之前,先创建一个空的文件夹test,右键点击Git Bash Here打开命令行窗口,在这个窗口中执行的都是Linux命令,然后执行git init将它初始化为一个仓库,这样后续的学习操作都会在这个仓库中进行。

认识.git目录

初始化仓库后,会出现一个.git目录,该目录保存着Git管理仓库的所有数据和资源
在这里插入图片描述
这并不是.git所有的内容,后续有跟踪文件了会再多出文件来保存暂存区的内容。解释一下上面各个目录文件的作用:
hooks:包含客户端或服务端的钩子脚本
info:包含一个全局性排除文件
logs:保存日志信息
object:存储所有数据内容
refs:目录存储指向数据的提交对象的指针(分支)
config:包含项目特有的配置选项
description:显示仓库的描述信息
HEAD:文件中指示了目前被检出的分支
现在看这些目录文件的作用会一头雾水,但是没关系,只要有个印象就好,随着学习的深入,会更理解这些含义。现在开始进入关于Git对象的学习。

Git对象

Git 的核心部分是一个简单的键值对数据库。你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索该内容。现在我们先往数据库中插入数据
在这里插入图片描述
echo 'test git'属于Linux命令,表示向控制台输入引号中的内容;
git hash-object -w --stdin表示向git数据库中存储标准输入中的内容(--stdin参数也可以换成一个文件路径),并返回该内容的哈希值,这个40位的哈希值是这个存储内容的唯一标识。
这时候我们可以打开.git/objects目录,可以看到新增了一个目录,目录名是哈希值前2位
在这里插入图片描述
目录中存放着以哈希值后38位命名的文件,文件里面的内容正是我们存储的数据,只是数据已经被压缩了。
在这里插入图片描述
也可以通过执行find .git/objects -type f来查看Git是如何存储数据的:
在这里插入图片描述
由于Git会将数据压缩再存储,所以直接打开文件查看内容会显示乱码,执行git cat-file -p 8ce43a3d893fc5bed0ecf6286f1dd7a9d43011cb可以查看原数据:
在这里插入图片描述

git cat-file -p + 哈希值 可以查看哈希值存储的数据

这条被存储的数据对象就是所谓的Git对象,也可以说是数据对象
可以执行git cat-file -t 8ce43a3d893fc5bed0ecf6286f1dd7a9d43011cb查看Git数据中存储的数据类型:
在这里插入图片描述
blob是Git内部对Git对象数据类型的定义。

总结
Git对象在Git数据库中是由key: value组成的键值对,keyvalue对应的哈希值,该键值对在git内部是一个blob类型。

接下来再操作一下对一个文件进行简单的版本控制。
首先往文件中输入内容:
在这里插入图片描述
将文件存入数据库
在这里插入图片描述
查看数据库内容,共有两个Git对象:
在这里插入图片描述
我们再使用vim test.txttest.txt文件中添加内容:
在这里插入图片描述
再查看一下版本库中的数据,依旧有两条,而且查看最新的一条,内容并没有发生变化:
在这里插入图片描述
原因是我们并没有把修改后的文件内容再写入数据库,要再执行以下命令,返回了一个新的哈希值:
在这里插入图片描述
这时候数据库中有3条数据:
在这里插入图片描述
查看最新的存储数据:
在这里插入图片描述
test.txt中最新的内容已经存入了数据库。
通过这一系列的操作,表明了只要对文件进行改动,必定会有一个Git对象一一对应,即使是同个文件,也有多个Git对象,这就是该文件的多个版本。

存在的问题
  • 当前所有的操作都是直接与版本库产生交互,并不涉及暂存区。
  • 文件名并没有被保存,只保存了文件的内容。
  • 每一条Git对象保存的都是一个文件的快照,但是项目是有多个文件的,Git对象不能保存项目的快照。

解决以上问题,就要继续学习树对象,关于树对象,再写一篇文章记录以下吧~。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:26:35  更:2022-08-19 19:28:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:56:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码