使用多个存储库的项目的git子模块的替代方案

时间:2017-07-25 12:56:45

标签: c++ git version-control tags synchronization

我有三个存储库: 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?

谢谢

2 个答案:

答案 0 :(得分:1)

我在CMake项目中广泛使用的子模块的一种替代方法是将所有模块作为独立的“库”并通过find_package() CMake命令使用它们(参见例如https://cmake.org/Wiki/CMake:How_To_Find_Librarieshttps://stackoverflow.com/a/20857070/1274747)。每个依赖项都提供自己的查找脚本,该脚本与库一起安装,依赖项目可以使用它来本地化库。

项目的方式不直接依赖于特定的“依赖”提交(但仍然可以依赖于特定的库版本,因为版本依赖关系也可以通过查找脚本来处理,参见例如FindBoost.cmake ,如果指定的话,它还处理所需版本的Boost库。

答案 1 :(得分:1)

  • 如果您的项目D有助于回购AB ,您可以将它们添加为项目的子模块{{1} }。

    但是当您签出项目D的某个版本时,无法同时将子模块签出到某个版本。解决方法是使用与DD标记相关的A版本,并执行脚本以将BA签出到相关版本。

    例如B v3.0D的{​​{1}}和v1.0 A相关的版本,因此您可以添加标记v2.0中的Bv3.0.1.0中的A。当您结帐v3.0.2.0 B时,您可以运行脚本来结帐v3.0D到版本以A开头。

    < / LI>
  • 如果您的项目B无法对回购v3.0*D 做出贡献,则可以删除子模块关联。来自AB的代码就像项目A的子文件夹以及文件夹B和文件夹D的版本一样,可以与您的版本同步项目A一直在进行。