Git存储数据的原理

Git存储数据的方式

Git 是一个内容寻址文件系统,也就是说他实际上是一个键值对数据库(key-value data store)。Git 存储一份数据,然后返回一个40位的 Hash 值作为键值,通过这个键值,我们就能找到所存储的数据。

Git存储数据的原理

Hash 值的前两位作为目录,后38位为文件名。文件的内容就是 键值对 ,也就是 Git 存储的一系列数据。

Git会存储哪些数据?

Git会存储哪些数据呢?

文件有三种状态: 未暂存已暂存已提交。Git 会存储 已暂存已提交 的文件。同时,当我们提交数据时,当前的提交信息也会被保存下来。所以,Git 会存储两种数据:

  1. 已暂存 已提交 的文件。
  2. 每次提交时的信息数据,也就是提交的注释,作者等。

Git如何存储数据?

Git 以键值对的方式存储数据, 就是 .git/objects 下的每个目录名及文件名, 就是文件的内容,这些值也称为 对象 。而对应于所存储的两种数据,Git 存储的对象有三种:数据对象树对象提交对象

数据对象

Git 使用数据对象来记录每一个文件的数据。比如将一个文件添加到暂存区(index)中,这时,在 objects 目录下就会产生一个数据对象。

可以用此命令查看该数据对象:

git cat-file -t

树对象

Git 在每次提交时,会将暂存区的所有数据保存起来,这时会产生一个 树对象 。树对象中的数据记录了在提交前,处于暂存区中的每个文件的状态。这个记录并非将数据都拷贝到当前树对象的文件中,而是记录了暂存区中每个文件的数据对象的 值。

树对象与数据对象存储的结构关系如下图:

Git存储数据的原理

树对象与数据对象的存储关系

提交对象

每次向 Git 仓库中提交文件时,Git 会生成一个提交对象,用以保存当前提交的信息,包括此次提交的父提交对象,作者的信息等。这个提交对象的保存方式也是以 Hash 值为文件名的文件。

Git就是将所需要用的到数据转为这三种对象,并且以 Hash 值为文件名的文件的形式,保存在 .git/objects 中。实际上,除了这三种对象,还有第四种对象,即 标签(tags) 对象。保存形式也是一样的。

实际操作

数据存储方式

初始化一个 Git 仓库,当前 .git/objects/ 目录如下:

Git存储数据的原理

添加一个文件:

Git存储数据的原理

将其加入到暂存区:

Git存储数据的原理

可以看到 objects/ 下多了一个文件夹:

Git存储数据的原理

这个就是保存的在暂存区中的文件。

将暂存区的文件提交:

Git存储数据的原理

可以看到 objects/ 下多了两个文件夹:

Git存储数据的原理

多出来的两个文件,一个是此次提交的树对象,一个是此次提交的提交对象。

三种提交对象

运行以下命令:

Git存储数据的原理

展开阅读全文

页面更新:2024-04-18

标签:数据   文件名   美文   文件夹   仓库   也就是   命令   原理   对象   形式   状态   两个   方式   文件   目录   内容   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top