问题描述
我们有两个项目A
和B
,共享库为L
。为了避免重复L
的历史,我们正在考虑建立一个Git monorepo,它在顶层将包含A
,B
和L
:>
/
+-- L
| +-- src
|
+-- A
| +-- .idea (project Metadata)
| +-- src
|
+-- B
+-- .idea (project Metadata)
+-- src
项目A
或B
的本地检出应包含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”所做的任何更改都会自动提取到其他两个。