【问题标题】:In GitHub URL's: what is the difference between a tree and a blob?在 GitHub URL 中:树和 blob 有什么区别?
【发布时间】:2016-09-08 22:01:50
【问题描述】:

每当我尝试添加指向 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


【解决方案1】:

GitHub 的网站目前似乎是:

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

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

【讨论】:

    【解决方案2】:

    我发现this 文章很有帮助。这将详细解释 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 - 文件
    • 树 - 目录
    • 提交 - 对树的引用
    • 标签 - 提交参考

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

    【讨论】:

      【解决方案3】:

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

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

      • 工作树

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

      • 索引

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

      • 树状

        一个 ref 指向一个提交对象、一个树对象,或者一个标签对象指向一个标签或提交或树对象。

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

      参考文献

      【讨论】:

      • 您的回答没有帮助。我有同样的问题,你的回答没有解决。
      猜你喜欢
      • 1970-01-01
      • 2011-10-09
      • 2011-05-18
      • 2019-02-18
      • 2013-02-16
      • 2017-04-26
      • 1970-01-01
      • 2014-02-02
      • 2016-08-30
      相关资源
      最近更新 更多