Git (一) 文件内容与其散列值

Git是一个很不错的分布式版本控制系统,它主要维护两个主要的数据结构: 对象库(object store)索引(index)。这些数据存放在工作目录根目录下一个".git"的隐藏目录下,如:

其中,索引是临时的、动态的二进制文件,它捕获项目在某个时刻的整体结构的一个版本,对于版本库来说是私有的,并且可以在需要的时候按需求进行创建和修改。

对象库是核心,包含工作目录的所有文件数据信息和配置信息,存放在对象库有如下四种对象类型:

1. 块(blob)

文件的每一个版本表示为一个blob

2. 目录树(tree)

一个tree代表一层目录信息

3. 提交(commit)

一个commit保存版本库中每一次变化的元数据,每个提交对象指向一个目录树对象

4. 标签(tag)

给一个提交创建一个易懂的名字

对象都有名称,该名称内容由对象的内容经过SHA1得到,它是一个160位的数,一个文件内容不论存放在哪里,其产生的SHA1值一样,因此,可以跟踪文件内容是否发生变化来对应产生SHA1值来进行提交。与CVS和SVN等版本控制系统不一样,Git追踪的不是文件,而是文件的内容,另外,当文件从一个版本更新到下一个版本时,Git是存储每个文件的每个版本,而不是文件的差异,因为Git是根据文件内容计算SHA1值的。

经过上面的基本概念,如下是.git目录下内容:

objects目录下就是存放Git对象的了:

我们看看objects/00目录下的内容:

这里存放了3个散列值,现在看看第一个散列值对应的文件内容(注意,为了提高文件系统效率,Git把散列值前2位当做目录,需要连接起来):

git cat-file -p 003f0cc5d3d87d71e05a5f668dba8e92394b76f7

这里记录了tree的散列值,我们一直按照这个值就可以一路跟着查到对应的文件的内容,可以通过"git ls-files -s"来查看所有文件对应散列值。

可使用"git show <提交的散列值> --pretty=fuller"来查看指定提交的详细内容。

可通过"git rev-parse <tag的名称>"来获取对应的散列值,然后再git cat-file -p <散列值>来查看对应的信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值