让我们在这里做一些笔记:
- 短语monotree,甚至是部分单词mono,从未出现在引用的文章中。
- 文章中出现了 7 处单词tree。
- 在这七次出现中的六次中,这里的整个短语是主内核树。没有使用这个完整短语的一个参考只是说树,但显然与其他六个具有相同的意图。
- 你已经用git linux monorepo标记了它(以防标签改变)。
您的问题相当于:作者所说的“主内核树”是什么意思?或者当人们提到一棵树时,他们通常是什么意思? 这些都是有效的问题,但与 Git 并不特别相关。
计算机科学中的树往往指的是数据结构,它的定义也很松散;请参阅维基百科条目。我们有一些节点和边的集合——在数学上,一个图G由它的一组顶点V和边E定义,其中每个顶点通过边连接到其他顶点——并且图上有约束,因此它是最小连接的,或者等效地,最大无环。(参见https://en.wikiversity.org/wiki/Introduction_to_graph_theory/Proof_of_Theorem_4以及数据结构 Tree 和 Graph 有什么区别的答案? )
Git 中的树对象特指存储的 Git 类型“树”的 Git 对象(存储在存储库数据库中的四种 Git 对象类型之一——其他三种是commit、blob和annotated tag)。这样的对象存储 <mode, name, hash-ID> 三元组,其中 mode 和 hash-ID 标识要与名称关联的其他 Git 对象,名称是任意1字节字符串,不包括 NUL 和斜杠(代码 0 和 0x2f 或分别为 47 个)。提交对象存储在 Git 中包括单个树对象的哈希 ID。读取树对象并定位它列出的子对象,然后如果这些对象是树,则递归地读取它们自己的子对象,从而构建作为 CS 样式树的最小连接图。
1由于缓存条目字段的长度限制ce_namelen
,它具有 32 位整数类型。因此,任何名称组件的长度都不能超过 4 GB。实际上,没有一个可能超过 255 字节,但据我所知,Git 中的树对象不会强制执行任何特定限制。
文件系统树在 Linux 中,实际上只是一个字符串,用于标识文件系统中的实体,尽管命名目录以外的任何内容都会导致一棵只有一个节点的退化树。但是,通过命名目录,您可以暗示解释此字符串的任何人都应该读取目录的内容,这些名称(通过与标识目录本身的字符串连接)命名另一个 Linux 文件系统树,可能是带有单个文件或设备节点或其他任何东西。这种递归枚举会导致构建一个最小连接图,就像 Git 树对象一样。(也许不出所料,Linux 目录对象对名称的约束与 Git 树对象基本相同,尽管它们的最大组件名称长度通常要小得多,通常为 255 字节或更少。)
最后,本文中使用主内核树这一短语的方式是指 Linux 内核存储库——Linus Torvald 的 Linux 内核 Git 存储库——以及围绕它的整个生态系统。关于细节有很多争论的空间。在这里,我将仅包含指向此特定InfoWorld 文章的链接,该文章似乎是对撰写本文时(2016 年 8 月)时事态的合理总结。