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



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

添加链接https://github.com/facebook/pop/blob/master/Podfile

如果你把blob改成tree:

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

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

GitHub的网站目前似乎是:

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

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

我觉得这篇文章很有帮助。这里详细解释了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 - file
  • 树-目录
  • 提交-引用树
  • 标签-提交
  • 的引用

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

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

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

  • 工作树

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

  • 指数
  • 包含stat信息的文件集合,其内容以对象的形式存储。索引是工作树的存储版本。事实上,它还可以包含第二个,甚至第三个版本的工作树,它们在合并时使用。

  • tree-ish

    一个ref指向一个commit对象,一个tree对象,或者一个tag对象指向一个tag对象,一个commit对象,一个tree对象。

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

引用

  • Git - Git Objects

  • Git内部:Git如何存储版本之间的细微差异?

  • 比较和合并文件:Hunks

  • Git与交互补丁add

最新更新