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

40

请查看此答案:https://dev59.com/0m435IYBdhLWcg3wvys5 - Jota Ge
@JotaGe,那个链接描述的是一个树和一个提交之间的区别,而不是一个树和一个二进制数据对象之间的区别。 - cowlinator
3个回答

11

GitHub的网站目前似乎:

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

可能在你提问时,GitHub的网站只是重新编写treeblob之间的文件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

就要添加到文档中时,要优先选择哪个链接取决于链接指向的内容。基本上,有4种类型的git对象:
- blob - 文件 - tree - 目录 - commit - 对tree的引用 - tag - 对commit的引用
希望这回答了你的问题。我仍然建议阅读文章,以全面了解git对象。

4
一个 blob 是文件的一种表示形式,文件差异被分成连续的修改块(称为 hunks)。Hunks 是 git diff 输出格式中用 @@ 分隔的行。
树是目录的一种表示形式。有不同类型的树:
- 工作树:实际检出文件的树。工作树通常包含 HEAD 提交树的内容,以及您尚未提交的任何本地更改。 - 索引:带有 stat 信息的文件集合,其内容存储为对象。索引是您工作树的存储版本。实话实说,它还可以包含第二个甚至第三个工作树版本,这些版本在合并时使用。 - 树状物:指向提交对象、树对象或标签对象(指向标签、提交或树对象)的引用。
Git 内部存储中有四种对象类型:提交对象、注释标记对象、blob 和树对象。
参考资料

11
你的回答没有帮助。我有同样的问题,但你的回答并没有解决它们。 - Alan Wolfe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接