• Git存储原理——树对象


    什么是树对象

    树对象能解决文件名保存的问题,也允许我们将多个文件组织到一起。Git 以一种类似于 UNIX 文件系统的方式存储内容。所有内容均以树对象和数据对象(git 对象)的形式存储,其中树对象对应了 UNIX 中的目录项,数据对象(git 对象)则大致上对应文件内容。一个树对象包含了一条或多条记录,一个树对象也可以包含另一个树对象。

    构建树对象

    可以通过 update-index;write-tree 等命令来构建树对像并塞入到暂存区
    为了演示树对象的构建,我们先准备一个空的git仓库,然后准备一个test.txt文件并创建该文件的一个git对象:
    在这里插入图片描述
    执行git update-index --add --cacheinfo 100644 fbb2ff04e2cae17293a83c5e83af505f62cd13d1 test.txttest.txt创建首个版本,并放到暂存区。由于项目中只有这个文件,因此也是项目的首个版本。
    在这里插入图片描述
    命令解释:
    update-index:为项目版本创建暂存区;
    –add:因为此前该文件并不在暂存区中,首次需要--add
    cacheinfo:因为将要添加的文件位于Git数据库中,而不是位于当前目录下,需要--caheinfo
    100644:Linux系统对文件模式有一个标识

    • 100644:表明这是一个普通文件
    • 100755:表示一个可执行文件
    • 120000:表示一个符号连接

    哈希值后面的参数就是对哈希值对应的文件的命名。
    执行git ls-files -s查看暂存区的内容
    在这里插入图片描述
    文件已经被添加进暂存区了。
    再查看一下版本库,
    在这里插入图片描述
    版本库中存的这个哈希值是执行git hash-object所生成的git对象,也就是说update-index只是把该git对象命了名(test.txt)并把它放进暂存区,没有跟版本库有交互。

    write-tree

    接下来介绍一下git write-tree,该命令的作用是将暂存区做一个快照,给暂存区生成一个树对象,并放入到版本库。
    在这里插入图片描述
    返回了一个哈希值,查看该哈希值类型
    在这里插入图片描述
    结果显示是一个树类型,也就是说该哈希代表的是一个树对象。查看版本库:
    在这里插入图片描述
    版本库中新增了刚生成的树对象。
    再次查看暂存区
    在这里插入图片描述
    也就是说write-tree把暂存区中的数据写入到版本库中并不会清空暂存区中的内容。
    实际上可以多次在暂存区中存放项目快照,最后一并执行git write-tree把这个项目快照存到版本库,这个项目快照代表的项目的一个版本。

    之前演示的是只有一个文件的项目,再演示有多个文件的项目。
    创建一个dog.txt文件,一如既往地先生成git对象
    在这里插入图片描述
    现在版本库中存的是test.txt第一个版本的git对象、项目第一个版本的树对象、和dog.txt第一个版本的git对象。我们再创建test.txt的第二个版本,修改test.txt文件
    在这里插入图片描述
    生成git对象
    在这里插入图片描述
    此时已经准备好了项目的第二个版本(第一个版本是新增了test.txt文件,第二个版本新增了dog.txt文件并修改了test.txt文件),再把这两个文件添加进暂存区
    在这里插入图片描述
    生成项目第二个版本的树对象
    在这里插入图片描述
    版本中已经有了项目的第二个版本。

    总的来说,git对象存储的只是一个文件的版本,树对象存储的是一个项目的版本。

  • 相关阅读:
    unity Newtonsoft.Json通过字段名直接读取字段值
    EtherCAT从站转modbus RTU协议转换网关用modbus slave测试的方法
    ES的高可用
    C++初阶:C++入门
    【若依(ruoyi)】设置主题样式
    超声波气象站无需架设通讯线路,传输距离远,传输效率高
    sudo -u root whoami && ****无法用root权限执行后续命令的解决办法
    计算机基础之计算机的前沿技术
    解析正则表达式的底层实现原理
    RDPCrystal EDI SDK 10.0.4.X Crack
  • 原文地址:https://blog.csdn.net/Hoshizola/article/details/126436076