【发布时间】:2018-07-02 12:05:57
【问题描述】:
我最近遇到了 Greg Kroah-Hartman 撰写的 article,关于为什么 Linux 内核没有稳定的 API 以及内核存储库是如何组织为单树的。当我与朋友讨论这篇文章时,很明显我们对 tree 这个词的含义有了不同的理解:
-
tree指的是项目的不同子文件夹。 - 指的是git master分支的不同fork。
在第一种情况下,贡献者不会签出完整的项目,例如Linux 内核,但只是一个子文件夹。然后可以将这些与例如git-subtree.
在第二种情况下,贡献者必须检查整个项目并基本上创建一个 monorepo 的分支。
那么,monotree 中的tree 指的是什么,如何用 git 将项目组织为 monotree?
【问题讨论】:
-
第一种情况更正确,但存储库的根文件夹也被跟踪为树。运行
git log -1 <commit> --pretty=raw,您可以看到提交的根树。它有一个像提交一样的哈希名称。运行git ls-tree <treeid>,你可以看到这棵树有什么。它可以有 blob、树和提交。带有文件名的 Blob 代表文件。带有文件夹名称的树代表 foders。提交代表子模块。它们是您可以在根文件夹中看到的内容。子文件夹有什么?然后运行git ls-tree <subtree-id>。您可以添加-r -t以查看全貌。 -
谢谢。这让事情有点清楚了。我应该多研究一下 git 的架构。