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

gra*_*aci 12 git tree terminology blob github

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

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

如果您将blob更改为tree以下内容,则会出现相同的文档:

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

有什么不同?每当我想在文档中为后代添加链接时,我更喜欢哪一个?

Mar*_*ell 7

GitHub 的网站目前似乎是:

  • 使用blob的文件,并tree为目录中的网址;
  • 重定向请求文件 URL 的浏览器tree改为包含blob;和
  • 将请求包含目录 URL 的浏览器重定向blob到包含的 URL tree

在您提出问题时,GitHub 的网站可能只是在tree和之间重写文件 URL blob,而不是正确重定向它们。(重写和重定向 URL 是 Web 服务器的活动。)如果是这样,那么更改将不会出现在浏览器的地址栏中。但也许你不是那个意思。


Moh*_*aib 5

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

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

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

  • blob 对象(目录如何指向其他文件)
  • 其他树(目录如何可以有子目录)
       tree

  /     |    \

blob   tree  blob

        |

       blob
Run Code Online (Sandbox Code Playgroud)

希望上面的例子澄清了差异。

在您的示例中,Podfile是一个包含源代码的文件。因此,它是一个blob对象。然而,git 很聪明并且意识到了这个事实。因此,当您单击该链接时,它会将链接中的 更改treeblob。您可以通过单击以下tree链接自行尝试测试:

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

类似地,如果您转到 git 存储库上的目录,它就是一个tree对象。同样,如果您将 更改treeblobgit 是明智的,并且意识到它实际上是一个目录而不是文件并将blob链接中的更改为tree. 同样,您可以尝试自己测试:

https://github.com/facebook/pop/blob/master/pop-tests

就当你想添加到文档时更喜欢哪个链接而言,这取决于链接指向什么,基本上有 4 种类型的 git 对象:

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

希望这能回答你的问题。我仍然建议通读这篇文章以彻底了解 git 对象。


Pau*_*tte 4

Blob 是文件的表示,文件差异被分成名为 的连续修改块hunks。Hunks 是输出格式@@中的分隔行git diff

\n\n

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

\n\n
    \n
  • 工作树

    \n\n
    \n

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

    \n
  • \n
  • 指数

    \n\n
    \n

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

    \n
  • \n
  • 树状

    \n\n
    \n

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

    \n
  • \n
\n\n
\n

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

\n
\n\n

参考

\n\n\n

  • 你的回答没有帮助。我也有同样的问题,你的回答并没有解决这些问题。 (11认同)