2017-07-25 52 views
0

与git为项目子模块我有三个存储库:Ç(C++代码)替代使用多个存储库

是独立的项目和两个取决于C。该协会已经取得了git的子模块

我现在是一个新的项目d取决于一个创建,所以现在Ç被称为两次

项目结构将类似于以下内容:

D 
|--A 
| | 
| C 
| 
|--B 
    | 
    C 

由于不同版本的D对应于不同版本的AB我想在检查版本之间时让它们保持同步。

我考虑去除子模块协会和开关repo所有d。是否有意义?有没有更好的方式来使用唯一的git?

谢谢

+0

这实际上是语言无关的,不需要提及特定的编程语言。 –

+1

嗨。是的,我知道,我只是为了以防万一:) 我知道有一些语言依赖工具,有时可能会有所帮助 – Stefano

+0

'git checkout --recurse-submodules'有什么问题? – phd

回答

0

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

项目的方式不直接依赖于特定的“依赖”提交(但仍可以依赖于特定的库版本,因为版本依赖项也可以通过查找脚本来处理,请参阅FindBoost.cmake,它们也是如果指定则处理所需的Boost库版本)。

1
  • 如果你的项目D是促成回购AB,则可以将其添加为子模块为您的项目D

    但是,签出项目D的某个版本时,无法同时将子模块签出到某个版本。解决方法是对AB标签使用D的相关版本,并执行脚本将结帐AB转换为相关版本。

    v3.0D是关系到ABv2.0v1.0的版本,所以你可以在Av3.0.2.0B与版本v3.0.1.0添加标记。当您为D结帐v3.0时,您可以运行脚本来结帐AB,版本以v3.0*开头。

  • 如果你的项目D不利于回购AB,你可以删除子模块的关联。 AB的代码就像您的项目D的子文件夹和文件夹A和文件夹B的版本可以一直与您的项目D的版本同步。

+0

是的,我正在考虑为此创建一个自定义脚本。以正确的方式命名它,可以让你将它用作git扩展:) – Stefano

+0

是否使用git扩展取决于你正在使用哪个工具git repo。如果您使用git命令行来操作git repo,则无法使用git扩展,您可以直接执行脚本来检出所有相关版本的子模块。 –