3

我目前正在学习 git,并且我有一个 git repo,我可以在其中看到一个.git目录。

在该目录中,我可以看到某些我可以理解的文件和文件夹。

但是有一个目录名为objects. 我想不出它们是干什么用的。

例如我的objects目录有:

04  4a  5f  7a  e9  f2  info  pack

例如,如果看到内容,04我可以看到一个名为12697515217f658b245149a986aba32fa98f38. 我看不到它的内容,它被加密了。

谁能说出这些objects文件夹的用途?为什么大哈希不喜欢12697515217f658b245149a986aba32fa98f38

无论如何,我都可以解密它的内容12697515217f658b245149a986aba32fa98f38并真正了解 git 是如何发挥它的魔力的?

提前致谢。

4

2 回答 2

2

.git/objectgit 存储中,它有自己的内部 blob 仓库,全部由 SHA 索引。

为什么大哈希不喜欢12697515217f658b245149a986aba32fa98f38

它是 blob 树的某种表示形式。不同的文件系统以这种方式保存所有 blob 目录更快、更舒适。

无论如何,我都可以解密它的内容12697515217f658b245149a986aba32fa98f38并真正了解 git 是如何发挥它的魔力的?

我真的希望你不能解密它(它只是被压缩,而不是像@knittl 在评论中注意到的那样加密)。

如果您对目录中的商店感兴趣,.git请查看该文章http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html

于 2013-01-27T14:14:26.037 回答
0

objects 目录包含所有存储库文件。这是 git 存储文件备份、存储库中的提交等的地方。这些文件都是加密和压缩的,它们看起来不会太多。git中有四种对象。

  1. 犯罪
  2. 斑点
  3. 注释标签

为了理解这些,我们需要知道什么是散列函数。散列函数是将任意大小的输入数据映射到固定大小的输出值的函数。

例如:

"I love StackOverflow" --> Hashing Function
                                  |
              dd76fc997fe194a71fe545fb51ff622762a293ff

学习的要点是哈希函数总是会dd76fc997fe194a71fe545fb51ff622762a293ff在内容为 时给出输出"I love StackOverflow"

因此,我们可以推断散列函数是确定性的。您可以检查任何内容的哈希输出,也可以"I love StackOverflow" 在存储库中使用以下命令:

echo "I love StackOverflow" | git hash-object --stdin

来到你是否可以解密哈希码的问题。是的,有办法做到这一点。首先,您必须存储内容的哈希值。例如,

echo "I love StackOverflow" | git hash-object --stdin -w

通过在末尾添加 -w 我们的哈希将被存储,我们可以通过

git cat-file -p dd76fc997fe194a71fe545fb51ff622762a293ff

现在好奇为什么长哈希码甚至存在于 git 世界中,因为 git 负责查看存储库中存在的任何文件中所做的所有更改。因此,为了跟踪这些更改,git 分配了一个来自散列函数的长散列码,以简单地跟踪我们存储库中所做的每一个微小更改。

存储库中任何文件的每个细微更改都将被赋予一个哈希码,文件的内容将存储在称为“ blob ”的空间中。Blob 不会表示文件名,而只会包含带有哈希码的文件内容。

于 2021-11-01T08:07:57.430 回答