1.8. 探索对象数据库
探索对象数据库
好,接下来我们来看一下怎么去探索对象数据库。
存储位置
在前面,我们通过 git cat-file 这个命令,对 git 的对象已经有了一个比较深刻的了解,对如何和 git 的对象进行交互也有了一定的认识。但是我们还没有研究清楚 git 是把这些数据保存在哪里的。在我们当前这个 demo 的这个仓库里面,我们可以打开 .git/objects
这个文件夹,这就是 git 的对象数据库。
对象名的组成方式
每个对象不管它的类型是什么,都存储为一个文件,并使用 SHA-1 这个校验和作为文件名。但是。它并不是将所有的对象都存储在一个单一的文件夹里面,而是使它们 ID 的前两个字符作为第一层的文件夹名,就像下面这个样子一样。
➜ objects git:(main) ls
04 0d 14 23 2f 38 4c 5a 68 70 7d 85 91 9b a4 b1 b9 c2 ce d5 e1 ec f3 pack
06 0e 15 24 30 39 4f 5d 69 71 7f 86 92 9c a5 b2 ba c3 cf d8 e3 ed f5
08 0f 16 28 31 3e 51 5f 6a 72 80 88 94 9e ab b3 bb c5 d1 d9 e6 ee f9
0a 10 17 29 32 42 56 60 6b 73 82 8b 95 9f ac b6 be ca d2 db e7 f0 fb
0b 11 18 2d 34 45 57 62 6c 75 83 8d 96 a2 ae b7 bf cb d3 dc e8 f1 ff
0c 12 21 2e 37 47 59 64 6e 78 84 8f 9a a3 b0 b8 c0 cd d4 dd e9 f2 info
随后他们再把对象放到对应的文件夹里面。比如进入 04 文件夹,然后获得该文件的 ID 后38个字符
➜ objects git:(main) cd 04
➜ 04 git:(main) ls
6bbb4a7f4ce6654deeb2e406d39d359b9e6bb7
如何拼接完整ID
这个 ID 是根据它的两个字符的文件夹名,再加上它们里面的文件的文件名,作为一个完整的ID。
判断对象类型
➜ 04 git:(main) git cat-file -t 046bbb4
blob
根据类型查看文件具体内容
➜ 04 git:(main) git cat-file blob 046bbb4
<!DOCTYPE html>
<html lang="en">
<head>
<title>The Blue Page</title>
<meta charset="utf-8" />
</head>
<body>
<h1 style="color: #00F">The Blue Page</h1>
<p>Blue is the color of the sky.</p>
<p><a href="index.html">Return to home page</a></p>
</body>
</html>
Note: 如果是 tree 就记得使用 git ls-tree 这个命令。