在 GitHub URL 中:树和 blob 有什么区别?

问题描述 投票:0回答:3

每当我尝试添加 github 文件的链接时,我都会注意到这一点。您可以使用

blob
:

添加链接

https://github.com/facebook/pop/blob/master/Podfile

如果将 blob 更改为

tree
,则会出现相同的文档:

https://github.com/facebook/pop/tree/master/Podfile

有什么区别?每当我想在文档中添加供后代使用的链接时,我应该选择哪一个?

git github tree blob terminology
3个回答
11
投票

GitHub的网站目前好像是:

  • 在 URL 中使用
    blob
    表示文件,使用
    tree
    表示目录;
  • 将请求包含
    tree
    的文件 URL 的浏览器重定向为包含
    blob
    ;和
  • 将请求包含
    blob
    的目录 URL 的浏览器重定向到包含
    tree
    的 URL。

在您提出问题时,GitHub 的网站可能只是重写了

tree
blob
之间的文件 URL,而不是正确地重定向它们。 (重写和重定向 URL 是 Web 服务器的活动。)如果是这样,则更改不会出现在浏览器的地址栏中。但也许你不是这个意思。


11
投票

我发现这篇文章很有帮助。这详细解释了 git 对象。

本质上,blob 只是一堆字节,可以是任何东西,比如文本文件、图像、实际源代码等。

树就像一个目录,它指向:

  • 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 种类型:

  • blob - 文件
  • 树 - 目录
  • 提交 - 对树的引用
  • 标签 - 提交引用

希望能回答您的问题。我还是建议仔细阅读这篇文章,以彻底了解 git 对象。


4
投票

blob 是文件的表示,文件差异被分成名为

hunks
的连续修改块。 Hunks 是
@@
输出格式中由
git diff
分隔的行。

树是目录的表示。有不同类型的树:

  • 工作树

    实际签出文件的树。工作树通常包含 HEAD 提交树的内容,以及您已进行但尚未提交的任何本地更改。

  • 索引

    具有统计信息的文件集合,其内容存储为对象。索引是工作树的存储版本。说实话,它还可以包含工作树的第二个甚至第三个版本,在合并时使用。

  • 树形

    指向提交对象、树对象或指向标签或提交或树对象的标签对象的引用。

Git 的内部存储中有四种类型的对象。提交对象、带注释的标签对象、blob 和树对象。

参考文献

© www.soinside.com 2019 - 2024. All rights reserved.