我有三个存储库: A , B , C (c ++代码)
A 和 B 是独立项目,两者都取决于 C 。该关联已与 git子模块
进行了关联我现在创建一个新项目 D 依赖于 A 和 B ,所以现在推荐 C 两次
项目结构类似于以下内容:
D
|--A
| |
| C
|
|--B
|
C
由于 D 的不同版本对应 A 和 B 的不同版本,我希望有办法让它们保持同步状态检查版本之间。
我正在考虑删除子模块关联,并切换到所有 A , B 和 D 的repo。是否有意义?有没有更好的方法只使用git?
谢谢
答案 0 :(得分:1)
我在CMake项目中广泛使用的子模块的一种替代方法是将所有模块作为独立的“库”并通过find_package() CMake命令使用它们(参见例如https://cmake.org/Wiki/CMake:How_To_Find_Libraries或https://stackoverflow.com/a/20857070/1274747)。每个依赖项都提供自己的查找脚本,该脚本与库一起安装,依赖项目可以使用它来本地化库。
项目的方式不直接依赖于特定的“依赖”提交(但仍然可以依赖于特定的库版本,因为版本依赖关系也可以通过查找脚本来处理,参见例如FindBoost.cmake ,如果指定的话,它还处理所需版本的Boost库。
答案 1 :(得分:1)
如果您的项目D
有助于回购A
和B
,您可以将它们添加为项目的子模块{{1} }。
但是当您签出项目D
的某个版本时,无法同时将子模块签出到某个版本。解决方法是使用与D
和D
标记相关的A
版本,并执行脚本以将B
和A
签出到相关版本。
例如B
v3.0
与D
的{{1}}和v1.0
A
相关的版本,因此您可以添加标记v2.0
中的B
和v3.0.1.0
中的A
。当您结帐v3.0.2.0
B
时,您可以运行脚本来结帐v3.0
和D
到版本以A
开头。
如果您的项目B
无法对回购v3.0*
和D
做出贡献,则可以删除子模块关联。来自A
和B
的代码就像项目A
的子文件夹以及文件夹B
和文件夹D
的版本一样,可以与您的版本同步项目A
一直在进行。