git存储内容的位置和方式
Git是一个工具,只要熟练掌握它的操作就能完成工作中的绝大多数任务。
我们很少会考虑Git历史提交数据存储在哪,又以何种方式存储,下面对此进行一下介绍。
首先看一段代码实例:
1
2
3
4
5
6
7
8
|
let obj = { webName: "蚂蚁部落" , address: "青岛市南区" } obj.age = 4; console.log(obj.webName); console.log(obj.address); console.log(obj.age); |
上面是一个对象直接量简单演示,对象直接量以键/值对方式存储数据,通过键可以获取对应的值。
本质上Git存储数据的方式也是如此,键就是数据内容sha-1值,值自然是对象内容。
在E盘git目录下初始化一个全新的仓库,代码如下:
1
|
$ cd /e/git |
切换到git目录。
1
|
$ git init |
初始化一个全新的仓库,git目录下除了.git目录(默认隐藏)外别无它物。
.git目录中的objects子目录就是用来存储数据的,截图如下:
其中两个子目录是系统自动创建的,可以看到当前并没有存储任何数据。
下面开始向里面存储数据,代码如下:
1
|
$ echo "蚂蚁部落" | git hash -object -w --stdin |
代码运行效果截图如下:
解析如下:
(1)."蚂蚁部落"是要存储的内容。
(2).git hash-object命令用来存储数据对象。
(3).-w表示不仅计算出内容的sha-1值,而且会将数据存储,否则只会给出sha-1值。
(4).--stdin表示内容是通过标准输入设备获取的,比如我通过键盘输入。
(5).第二行是存储内容的sha-1值。
现在再来看一下.git/objects目录中的内容,截图如下:
多出了一个子目录,名字是21,它的内容是:
21子目录中有一个文件,名为0a3e5558a2c25c0a577a3f2555c2f82e5529c6。
内容存储位置总结如下:
(1).存储于.git/objects目录中。
(2).以sha-1值的前两位作为子目录名称,存储内容的文件名字为sha-1值的后38位。
现在我们打开存储内容的文件,截图如下:
存储的并不是原始数据“蚂蚁部落”,而是通过zlib压缩的内容。
下面根据sha-1值这个键来查看对应的值(也就是存储的数据):
1
|
$ git cat - file -p 210a3e5558a2c25c0a577a3f2555c2f82e5529c6 |
代码运行截图如下: