每当我尝试添加 github 文件的链接时,我都会注意到这一点。您可以使用
blob
: 添加链接
https://github.com/facebook/pop/blob/master/Podfile
如果将 blob 更改为
tree
,则会出现相同的文档:
https://github.com/facebook/pop/tree/master/Podfile
有什么区别?每当我想在文档中添加供后代使用的链接时,我应该选择哪一个?
GitHub的网站目前好像是:
blob
表示文件,使用 tree
表示目录;tree
的文件 URL 的浏览器重定向为包含 blob
;和blob
的目录 URL 的浏览器重定向到包含 tree
的 URL。在您提出问题时,GitHub 的网站可能只是重写了
tree
和 blob
之间的文件 URL,而不是正确地重定向它们。 (重写和重定向 URL 是 Web 服务器的活动。)如果是这样,则更改不会出现在浏览器的地址栏中。但也许你不是这个意思。
我发现这篇文章很有帮助。这详细解释了 git 对象。
本质上,blob 只是一堆字节,可以是任何东西,比如文本文件、图像、实际源代码等。
树就像一个目录,它指向:
tree
/ | \
blob tree blob
|
blob
希望上面的例子能够阐明其中的区别。
在您的示例中,
Podfile
是一个包含源代码的文件。因此,它是一个 blob
对象。然而,git 很聪明,意识到了这个事实。因此,当您单击链接时,会将链接中的 tree
更改为 blob
。您可以点击下面的 tree
链接自行测试:
https://github.com/facebook/pop/tree/master/Podfile
类似地,如果您转到 git 存储库上的目录,它就是一个
tree
对象。同样,如果您将 tree
更改为 blob
,git 会很聪明,并意识到它实际上是一个目录而不是文件,并将链接中的 blob
更改为 tree
。同样,您可以尝试自己测试一下:
https://github.com/facebook/pop/blob/master/pop-tests
当您想要添加到文档时,选择哪个链接取决于该链接指向什么。本质上,git 对象有 4 种类型:
希望能回答您的问题。我还是建议仔细阅读这篇文章,以彻底了解 git 对象。
blob 是文件的表示,文件差异被分成名为
hunks
的连续修改块。 Hunks 是 @@
输出格式中由 git diff
分隔的行。
树是目录的表示。有不同类型的树:
工作树
实际签出文件的树。工作树通常包含 HEAD 提交树的内容,以及您已进行但尚未提交的任何本地更改。
索引
具有统计信息的文件集合,其内容存储为对象。索引是工作树的存储版本。说实话,它还可以包含工作树的第二个甚至第三个版本,在合并时使用。
树形
指向提交对象、树对象或指向标签或提交或树对象的标签对象的引用。
Git 的内部存储中有四种类型的对象。提交对象、带注释的标签对象、blob 和树对象。
参考文献