每当我试图添加链接到github文件时,我都会注意到这一点。您可以使用blob
:
如果你把blob改成tree
:
有什么区别?每当我想在文档中添加一个链接时,我应该选择哪个?
GitHub的网站目前似乎是:
- url使用
blob
表示文件,tree
表示目录; - 将请求包含
tree
的文件url重定向为包含blob
的浏览器;和 - 重定向包含
blob
的浏览器到包含tree
的浏览器
有可能GitHub的网站,在你问这个问题的时候,只是重写tree
和blob
之间的文件url,而不是正确地重定向它们。(重写和重定向url是web服务器的活动。)如果是这样,那么更改将不会出现在浏览器的地址栏中。但也许你不是那个意思。
我觉得这篇文章很有帮助。这里详细解释了git对象。
本质上,blob就是一堆字节,可以是任何东西,比如文本文件、图像、实际的源代码等。
树就像一个目录,它指向:
- blob对象(一个目录如何指向其他文件)
- 其他树(一个目录如何拥有子目录)
tree
/ |
blob tree blob
|
blob
希望上面的例子能澄清两者的区别。
在您的示例中,Podfile
是一个包含源代码的文件。因此,它是一个blob
对象。然而,git很聪明,它意识到了这一点。因此,当您单击链接时,它将链接中的tree
更改为blob
。您可以通过单击下面的tree
链接来尝试自己测试:
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