我找了一会儿却找不到答案(也许我不知道该看什么).
我们有一个主库,它是一个自己的存储库(让我们称它为Lib)它包含我们的大多数模块和子模块.我们还说它的大小为2GB ......
现在我们有很多项目,例如:ProjA,ProjB,ProjC,每个项目都使用Lib作为子模块.
ProjA
Lib(分支:master,commit#:1)
ProjB
Lib(分支:其他,提交#:2)
ProjA
Lib(分支:master,commit#:4)
因此,虽然我能够保持每个项目引用正确的库(aka子模块)版本.我现在有3*2GB = 6GB的THE SAME子模块.
有没有办法在保持引用的正确文件/版本控制的同时引用单个子模块?
例如.
ProjA
Lib/base_lib.h(v1.0)
LIB/file_only_in_this_commit
ProjB
Lib/base_lib.h(v1.0)
ProjC
Lib/base_lib.h(v1.1)
谢谢!
您可以使用git worktree
(自git 2.5起可用)为Lib子模块创建额外的工作树,位于ProjA,ProjB等内部.
因为git worktree
使多个具有相同名称的工作树(所有被称为"Lib")变得很痛苦,我只是创建了一个脚本,share_submodules来解决这些困难并创建额外的工作树而不是子模块,将其设置为正确的子模块提交,并以递归方式对共享模块中的所有子模块执行此操作.
git submodule update --init --recursive
除了所有副本都引用一个模块的对象之外,它应该像子模块一样工作.
如果您通过删除子模块转换到它,那么您.git
和我创建的stray子模块文件会创建find_stray_submodules.py来清理它们.