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 这个命令。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~