理解git存储原理

git是一个文件寻址系统,什么是文件寻址?其实我也不是很理解,哈哈哈.....

Git 的底层存储从本质上讲是基于本地文件系统实现的 Key-Value 数据库. 这里的 Value 是 git 里的三种不同的对象的内容, 而 Key 则是对象内容的 hash 值

git对象有tag、blob、commit、tree,在这里我们只需要关注后三个对象。

其中blob是最基本的存储单元。git在提交时会生成commit,commit是一个快照,记录着该时刻所有文件的状态。而每个commit都是指向tree的,如下:

git log

查看commit内容

git cat-file -p c6298e6493a3096dc5dd9

这里可以看到一个tree对象,然后再查看这个tree

git cat-file -p ba65d80b3655f4

这里可以看到一个blob对象,再次查看这个blob对象

git cat-file -p ea4fff75dac5abe33d1ac53

到这里就是最底层的blob对象,也就是对应文件的内容。

由以上数据可以看出,每次commit都会生成三个对象,commit、blob、tree,最顶层的tree就是项目的跟目录,每个tree和blob都有一个hash值而且都是唯一的。commit的hash值指向tree,tree的hash值指向tree下的blob或者tree,blob的hash值指向文件的内容。

blob是最基本的存储单元,当文件发生变化是,就会生成新的hash值,那么它上层的tree的hash值也会发生变化。一直影响到顶层的tree。在每次提交时,如何文件的内容不发生变化,该文件就不会再次保存(也就是不会生成新的hash,还是用之前的)。

git存储文件只看内容;根据内容生成hash值;基于底层的blob名构建不同的tree;

在每次提交的时候会根据hash值检索所有的文件,生成新的hash值保存快照。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值