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

时间:2016-09-08 22:01:51

标签: git github tree blob terminology

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

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

如果将blob更改为tree,则会出现相同的文档:

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

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

3 个答案:

答案 0 :(得分:5)

GitHub的网站当前似乎是:

  • 在URL中将let controller = (function(mdl, ui){ // (imported domStrings from model): let DOM = mdl.getDomStrings(); let userInput = "scissors"; // a. Get user Input document.querySelector(DOM.submit).addEventListener("click", (e) => { e.preventDefault(); userInput = mdl.getUserInput(); getResult(); }); // b. get computer Input let compInput = mdl.compInput(); // c. check whether the player wins, the computer wins or if its a draw function getResult() { if(userInput === compInput){ console.log("Draw!") } else if(userInput === "rock" && compInput === "paper"){ console.log("Computer Wins!"); } else if(userInput === "rock" && compInput === "scissors"){ console.log("player wins"); } else if(userInput === "paper" && compInput === "scissors"){ console.log("computer wins") } else if (userInput === "paper" && compInput === "rock"){ console.log("user wins"); } else if (userInput === "scissors" && compInput === "rock"){ console.log("player wins"); } else if (userInput === "rock" && compInput === "paper"){ console.log("computer wins"); } else if (userInput === "scissors" && compInput === "paper"){ console.log("computer wins"); } } // i. update score // ii. display current score })(model, UI) 用于文件,将blob用于目录;
  • 将请求包含tree的文件URL的浏览器重定向为包含tree的浏览器;和
  • 将请求包含blob的目录URL的浏览器重定向到包含blob的URL。

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

答案 1 :(得分:4)

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

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

  • 工作树

      

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

  • 索引

      

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

  • 树肥胖型

      

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

  

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

<强>参考

答案 2 :(得分:0)

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

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

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

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

  /     |    \

blob   tree  blob

        |

       blob

希望以上示例阐明了两者之间的区别。

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

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

Similary,如果您转到git存储库上的目录,则它是tree对象。同样,如果将tree更改为blob,则git很聪明,并且意识到它实际上是目录而不是文件,因此将链接中的blob更改为tree。同样,您可以尝试自己进行测试:

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

关于要添加到文档中时首选哪个链接,取决于链接指向的内容,基本上有4种git对象:

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

希望能回答您的问题。我仍然建议阅读本文以全面了解git对象。