共享库的Git monorepo布局

问题描述

我们有两个项目AB,共享库为L。为了避免重复L的历史,我们正在考虑建立一个Git monorepo,它在顶层将包含ABL:>

/
+-- L
|   +-- src
|
+-- A
|   +-- .idea (project Metadata)
|   +-- src
|
+-- B
    +-- .idea (project Metadata)
    +-- src

项目AB的本地检出应包含L作为子目录,例如:

A
+-- .idea (project Metadata)
+-- src
+-- L
    +-- src

Git和稀疏签出或任何其他Git功能是否可能?如果不是,是否有一种备用存储库布局,该布局不会重复L并仍然提供上述工作树结构?

解决方法

使用Git和稀疏结帐是否可行...

是:相对较新的 cone模式稀疏签出是为此结构设计的。请参阅How to use git sparse-checkout in 2.27+,其中描述了Git 2.25中的工作原理在Git 2.27中的工作方式,以及您应该怎么做。

请注意,您可能需要Git 2.27或2.28。

,

实际上还有另一种方法-您可以将库以X-Module的形式添加到两个存储库中。它是一个免费的服务器端工具,旨在避免Git子模块的缺点。您无需创建monorepo,该库位于单独的存储库中,并与每个项目中的目录同步。在服务器端,对于最终用户A和B来说,它们只是常规存储库,每个存储库中都带有目录“ L”。但是对A或B(或直接在“ L”存储库中)的“ L”所做的任何更改都会自动提取到其他两个。