我有一个包含多个 Git 子模块的大项目。一个主项目使用不同库的集合,一些库本身使用库。所有库都可以独立使用,因此它们都需要一个包含测试基础设施(VUnit 和 UVVM)的子模块。
Git 子模块的树如下所示:
ProjectA
o- libA
o- UVVM
o- VUnit
o- libB
o- UVVM
o- VUnit
o- libC
o- libA
o- UVVM
o- VUnit
o- UVVM
o- VUnit
o- libD
o- UVVM
o- VUnit
o- UVVM
o- VUnit
我对 Git 的内部数据库和链接结构有一定的了解。因此,子模块的 BLOB 存储在.git
主存储库的目录中名为modules
. 它们通常具有与子模块目录名称相同的符号名称。
.git
子模块使用包含相对路径的文件指向其数据库主目录。作为回报,子模块数据库的配置文件指向子模块的工作树。
所以有可能所有的 UVVM 子模块都指向同一个数据库,但是一个数据库怎么可能指向多个工作树呢?
我发现 Git 扩展可以与多个工作目录一起使用,但它是否也可以与我的情况一样的子模块一起使用?
我也愿意接受其他建议。
编辑1:
这是.git
目录中生成的内部结构。它一遍又一遍地为 UVVM 和 VUnit 的每个子模块创建完整的对象存储。
.git/
modules/
libA/
modules/
UVVM/
VUnit/
libB/
modules/
UVVM/
VUnit/
libC/
modules/
libA/
modules/
UVVM/
VUnit/
UVVM/
VUnit/
libD/
modules/
UVVM/
VUnit/
UVVM/
VUnit/
服务器上的内存占用非常低,因为所有子模块都指向同一个存储库。但是客户端的内存占用非常高。