Linux 如何用git组织monotree?

Linux 如何用git组织monotree?,linux,git,monorepo,Linux,Git,Monorepo,我最近遇到了GregKroahHartman的一篇文章,内容是关于为什么Linux内核没有一个稳定的API,以及内核存储库是如何组织为单树的。当我与一位朋友讨论这篇文章时,很明显我们对树一词的含义有不同的理解: 树指项目的不同子文件夹 它指的是git主分支的不同分支 在第一种情况下,贡献者不会签出整个项目,例如Linux内核,而只签出一个子文件夹。然后可以将它们与例如git子树相结合 在第二种情况下,贡献者必须检查整个项目,并基本上创建monorepo的分支 那么monotree中的tree指的

我最近遇到了GregKroahHartman的一篇文章,内容是关于为什么Linux内核没有一个稳定的API,以及内核存储库是如何组织为单树的。当我与一位朋友讨论这篇文章时,很明显我们对
一词的含义有不同的理解:

  • 指项目的不同子文件夹
  • 它指的是git主分支的不同分支
  • 在第一种情况下,贡献者不会签出整个项目,例如Linux内核,而只签出一个子文件夹。然后可以将它们与例如
    git子树
    相结合

    在第二种情况下,贡献者必须检查整个项目,并基本上创建monorepo的分支


    那么monotree中的
    tree
    指的是什么?如何使用git将项目组织为monotree

    让我们在这里做一些笔记:

    • 词组monotree,甚至部分单词mono,从未出现在中
    • 这篇文章出现了七次单词树
    • 在这七个事件中的六个事件中,这里的整个短语是主内核树。一个没有使用这个完整短语的引用只是说这棵树,但显然与其他六棵树具有相同的意图
    • 您已将其标记为(以防标记更改)
    你的问题是:作者所说的“主内核树”是什么意思?或者,当人们提到一棵树时,通常意味着什么?这些都是有效的问题,但与Git无关

    计算机科学中的树往往指的是数据结构,它的定义也相当松散;看见我们在数学上有一些节点和边的集合,一个由顶点集V和边E定义的图G,其中每个顶点通过边连接到其他顶点,并且图上有约束,因此它是最小连接的,或者等价地,最大无环的。(请参阅和的答案)

    Git中的tree对象具体指的是Git类型为“tree”的存储Git对象(存储在存储库数据库中的四种Git对象类型之一,其他三种是commit、blob和annotated tag)。这样的对象存储三元组,其中mode和hash ID标识与名称关联的其他Git对象,该名称是一个任意1字节字符串,不包括NUL和slash(分别为代码0和0x2f或47)。Git中存储的提交对象包含单个树对象的哈希ID。读取树对象并定位它列出的子对象,然后递归地读取它们自己的子对象(如果这些对象是树),从而构建最小连通图,即CS样式的树


    1由于缓存项
    ce\u namelen
    字段具有32位整数类型,因此存在长度限制。因此,任何名称组件的长度都不能超过4GB左右。实际上,没有一个应该超过255字节,但据我所知,Git中的树对象并没有强制执行任何特定的限制


    Linux中的文件系统树实际上只是一个字符串,用于标识文件系统中的实体,尽管命名目录以外的任何内容都会导致一个退化树,其中只有一个节点。不过,通过命名目录,您可以暗示任何解释此字符串的人都应该读取目录的内容,这些名称(通过与标识目录本身的字符串连接)命名了另一个Linux文件系统树,可能是一个带有单个文件或设备节点的退化文件系统树。这种递归枚举导致建立一个最小连通图,就像Git树对象一样。(也许毫不奇怪,Linux目录对象在名称上的约束与Git树对象基本相同,尽管它们通常具有更小的最大组件名称长度,通常为255字节或更少。)


    最后,本文中使用的短语“主内核树”指的是Linux内核存储库Linus Torvald的Git存储库,用于Linux内核及其周围的整个生态系统。关于细节有很大的争论余地。在这里,我将只包含一个指向此特定内容的链接,它似乎是对截至撰写之时(2016年8月)事态的合理总结。

    让我们在这里做一些注释:

    • 词组monotree,甚至部分单词mono,从未出现在中
    • 这篇文章出现了七次单词树
    • 在这七个事件中的六个事件中,这里的整个短语是主内核树。一个没有使用这个完整短语的引用只是说这棵树,但显然与其他六棵树具有相同的意图
    • 您已将其标记为(以防标记更改)
    你的问题是:作者所说的“主内核树”是什么意思?或者,当人们提到一棵树时,通常意味着什么?这些都是有效的问题,但与Git无关

    计算机科学中的树往往指的是数据结构,它的定义也相当松散;看见我们在数学上有一些节点和边的集合,一个由顶点集V和边E定义的图G,其中每个顶点通过边连接到其他顶点,并且图上有约束,因此它是最小连接的,或者等价地,最大无环的。(请参阅和的答案)

    Git中的tree对象具体指的是Git类型为“tree”的存储Git对象(存储在存储库数据库中的四种Git对象类型之一,其他三种是commit、blob和annotated tag)。这样的对象存储三元组,其中mode和hash ID标识与名称关联的其他Git对象,该名称是一个任意1字节字符串,不包括NUL和slash(分别为代码0和0x2f或47)。Gi中存储的提交对象