开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情
在.git文件中我们通过
git cat-file -t命令,可以查看文件类型.然后就引出了我们的主角blob对象.上文中侧重点在于讲解.git文件变化.今天我们好好欣赏一下新对象blob.
您能在这里看到啥
- Git对象
- blob对象
Git对象
-
引言
Git是一个内容寻址文件系统,Git的核心部分就是一个简单的
键值对数据库.你可以向Git仓库插入任意类型的内容.它会返回一个唯一的键.通过该键可哟在任意时刻再次取回该内容. -
Git对象类型有
四种:数据对象- blob树对象- tree提交对象- commit标签对象- tag
通过上面的四种对象搭建起了Git
数据结构
blob对象
-
blob对象含义blob对象又叫数据对象数据对象的产生是在使用git add命令,将文件或者目录加入暂存区-staging时产生的.对象本质就是
二进制的数据文件.只包含文件的内容,并不存储文件名和文件权限.文件名将在tree对象中存储 -
blob对象存储方式从
Git对象中,我们知道Git的核心部分是键值对数据库.blob对象也不例外.这里我就直接引用网上的图了,如下所示 -
blob对象存储方式及位置-
存储位置
在学习.git文件的时候.我们知道
.git文件结构如下所示**.** ├── COMMIT_EDITMSG ├── HEAD ├── config ├── description ├── **hooks** ├── index ├── **info** ├── **logs** ├── **objects** └── **refs**当执行过
git add命令后,这时候我们去.git/objects/目录下,就会看到一个文件76/2c98e3.如下所示由此我们可以知道
blob对象是存储在.git/objects/目录下. -
对象存储方式
Git对象的的键使用
40位的16进制数表示的.即SHA-1散列值.如762c983e33c2968ef90e5504c584a47f54a5c9c8从
.git/objects文件中,我们不难发现.文件是由散列值前两位字符76用于命名子目录.剩下38字符串为文件名.
-
-
查看
blob对象内容- 用
cat命令来查看对应内容.cat .git/object/76/2c983e33c2968ef90e5504c584a47f54a5c9c8 xK??OR04`x?1????=ӸGS **%**从上面的实战中,发现是乱码.为啥是乱码的.主要是我们的文件内容显示通过
zlib压缩,然后将zlib压缩后的内容写入磁盘文件.所以我们不能简单的通过cat指令获取内容.需要用git提供的命令获取内容 git cat-file- 查看
blob对象的内容git cat-file -p 762c983e 初始化 - 查看对象类型
git cat-file -t 762c983e blob
- 查看
- 用
-
Git底层命令创建blob对象
git hash-object可以将任意数据保存到./git/object目录下,虽然我们可以通过git add也能实现.但多学一种方式,总是有用的.相对来说git add是属于高级命令,而真正做事的还是git hash-object这种更底层的命令.echo "hellow" | git hash-object -w --stdin 4f6caba6e267fd5ddbc3e49af8843a1af1ab0793参数说明:
参数 说明 -w返回键(SHA-1),并将该内容得到blob对象写入到 .git/objects文件中.--stdin标准输入读取内容 -
从blob对象取回数据
在上面
git cat-file使用事例中,我们可以获取blob对象内容.现在我们利用它再取回被删除的内容.如下所示