Git 树和目录的区别是什么?

Git 树和目录的区别是什么?,git,terminology,Git,Terminology,我是一个git新手,尝试整理概念和术语。git术语表说,树相当于目录,目录是使用ls得到的。它们可以互换吗?或者“树”和“目录”是在不同的上下文中使用还是指单独的(尽管相关)事物?在Git术语中,“树”是文件和目录的层次结构。这(有意地)非常类似于文件系统中的目录 Git提交对象包含对tree对象的引用,tree对象是提交时所有文件的状态。简单地说,“tree”指的是当时整个存储库状态的快照(与当前代码的快照类似[也称为HEAD],进行当前签出提交时的存储库,等等) 目录只是指文件系统目录。

我是一个git新手,尝试整理概念和术语。git术语表说,树相当于目录,目录是使用ls得到的。它们可以互换吗?或者“树”和“目录”是在不同的上下文中使用还是指单独的(尽管相关)事物?

在Git术语中,“树”是文件和目录的层次结构。这(有意地)非常类似于文件系统中的目录

Git提交对象包含对tree对象的引用,tree对象是提交时所有文件的状态。

简单地说,“tree”指的是当时整个存储库状态的快照(与当前代码的快照类似[也称为HEAD],进行当前签出提交时的存储库,等等)

目录只是指文件系统目录。


    • 简短的回答是:是的,树就是目录,目录就是树


      答案很长:树是一个包含blob列表、要附加到blob的名称以及其他树和要附加到它们的名称的对象。对git模型中的不同对象类型有很好的解释;我建议你读一读

      有时我会用括号来吓唬自己。严格来说,这不是真的,因为树包含其他树,这些树本身也可能属于以前(和将来)提交的树。某些目录的树和其他提交中相同目录的树可能是相同的(相同的SHA1)。因此,一棵树可能不代表整个目录,而且它与时间无关(commits do)。我也有同样的问题-commit树结构与commit中包含的文件的目录结构匹配,但排除了没有跟踪的“空”目录。签出分支将创建任何需要的目录,但不会删除任何目录。第二个链接中的图表非常有用。谢谢。就我个人而言,我能够通过图示理解git的对象模型。是的,理解树引用Blob是关键。