git 文件的保存结构

本文详细介绍了Git如何通过commit、tree及blob对象存储提交的文件,揭示了每次提交时生成的文件夹及其内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Git每提交一次,就会在objects文件夹中增加3个目录,一个存放commit对象、一个存放tree对象、一个存放blob对象

例如:若提交记录是下面这个样子     
$ git log
commit 44374b0fe093277e2c6326925bfd5e7db809cdcb
Author: xinlei.zhu <xinlei.zhu@qunar.com>
Date:   Mon Nov 3 12:11:30 2014 +0800

    second

commit 3153c466b8513688d0782822126bbf3bc01b5ebc
Author: xinlei.zhu <xinlei.zhu@qunar.com>
Date:   Mon Nov 3 12:02:08 2014 +0800

    first

说明有两个commit记录,SHA1值分别为:44374b0fe093277e2c6326925bfd5e7db809cdcb(第二次提交)、3153c466b8513688d0782822126bbf3bc01b5ebc(第一次提交)
对于每次提交会产生3个文件夹,其中代表commit对象的文件夹的名字为:44  和  31  (用commit对象的SHA1值得前两个字符作为文件夹的名字)
在commit文件夹下各有一个文件,文件名为commit对象SHA1值的后38个字符,对于上述提交则有:/44/374b0fe093277e2c6326925bfd5e7db809cdcb 和 /31/53c466b8513688d0782822126bbf3bc01b5ebc
commit文件夹中的文件内容包含:tree对象的SHA1值、panrent的SHA1值(如果不为第一次提交的话)、author和committer的信息
如下所示:
$ git cat-file -p 44374b0fe093277e2c6326925bfd5e7db809cdcb
tree 82d9e2c256f6d6ce01d4da075ad60b8e1ff2d241
parent 3153c466b8513688d0782822126bbf3bc01b5ebc
author xinlei.zhu <xinlei.zhu@qunar.com> 1414987890 +0800
committer xinlei.zhu <xinlei.zhu@qunar.com> 1414987890 +0800

second

上面的加粗内容为commit对象所包含的内容:tree对象、parent对象(该对象指向上一个commit对象)、author、committer


前面说过一次提交会产生3个文件夹,commit文件夹、tree文件夹、blob文件夹,commit文件夹我们已经知道了,这里说说tree文件夹
tree文件夹保存的时tree对象,该文件夹的名字也是其对象的SHA1值得前两个字符,这里为:82
tree文件夹下有一个文件代表tree对象,名字为tree对象SHA1值得后38位字符,即:/82/d9e2c256f6d6ce01d4da075ad60b8e1ff2d241

然后我们查看tree对象:
$ git cat-file -p 82d9e2c256f6d6ce01d4da075ad60b8e1ff2d241
100644 blob d800886d9c86731ae5c4a62b0b77c437015e00d2    1.txt
100644 blob ee2b8364542e6512c6ff1d906cfa3787731f3ec2    2.txt

发现里面包含两个blob文件,分别为1.txt 、2.txt,这两个文件正是我所提交的内容(第一次提交了1.txt, 第二次提交了1.txt和2.txt),这里查看的也是第二次提交的tree对象

如果再查看2.txt的话:
$ git cat-file -p ee2b8364542e6512c6ff1d906cfa3787731f3ec2
456
会发现它的值正是2.txt文件里的内容。


总结:我们提交的文件最终都是存放在git工作目录下的,以SHA1值为文件名,每个blob对象存放一个文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值