问题:
Git 使用基于内容的文件寻址系统(即它使用 blob 和树哈希作为“文件名”)。我想知道这种寻址系统有什么好处?
我可以清楚地看到一些好处,但这些好处都是次要的:
我觉得使用 sha 进行文件寻址的真正原因是完全不同的。谁能解释一下吗?
PS澄清。问题是为什么 Git 使用哈希来寻址文件,而不是它是如何做到的。我知道如何做,我需要知道为什么。
PPS 有一篇关于 Git 原理的文章以及为什么 Git 看起来如此奇怪(因为它应该在除了核心操作系统和文本编辑器之外没有其他软件的机器上使用),但这篇文章仍然只提到了这个原因:
如果您计算文件的 sha 并且该 sha 已经在对象文件夹中,那么您就知道不需要再次存储它,因为 sha 取决于内容。
好吧,这就是我明白的原因。还有其他原因为什么要使用内容可寻址文件系统?
git 需要做的最常见的事情之一就是比较项目的两个版本。由于对象存储(提交、树和 blob)是内容可寻址的,因此可以通过比较“文件名”非常快速地完成此操作。
此外,在存储内容时,很容易看出它是否是您已经存储的内容的副本,因此您可以避免存储重复项。
该哈希值是对象的唯一 ID。您可以对存储在数据库中的 blob 执行相同的操作 - 计算哈希值并将其设为 ID。其优点如下:
.git(它们被旧提交引用,因此必须保留在 中.git)。PS:虽然第 1-2 点也可以通过代理 ID 来实现,但您只需将哈希值与这些 ID一起存储即可。因此,在存储新文件之前,您必须计算其哈希值并通过数据库中的哈希值查找代理 ID。不太方便,但可能。
| 归档时间: |
|
| 查看次数: |
816 次 |
| 最近记录: |