C++ 使用多个存储库的项目git子模块的替代方案
我有三个存储库:A,B,C(C++代码) A和B是独立的项目,两者都依赖于C。已与git子模块建立关联 我现在创建了一个新项目D,它依赖于a和B,因此现在C被引用了两次 项目结构类似于以下内容:C++ 使用多个存储库的项目git子模块的替代方案,c++,git,version-control,tags,synchronization,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的不同版本,因此我想在版本之间签出时有一种方法保持它们同步 我正在考虑删除子模块关联并切换到for allA、B和D。这有意义吗?是否有更好的方法只使用git 谢谢我在CMake项目中广泛使用的子模块的一个
D
|--A
| |
| C
|
|--B
|
C
由于D的不同版本对应于A和B的不同版本,因此我想在版本之间签出时有一种方法保持它们同步
我正在考虑删除子模块关联并切换到for allA、B和D。这有意义吗?是否有更好的方法只使用git
谢谢我在CMake项目中广泛使用的子模块的一个替代方案是将所有模块作为独立的“库”,并通过CMake命令使用它们(例如,请参见或)。每个依赖项都提供自己的查找脚本,该脚本与库一起安装,依赖项目可以使用它来本地化库 这样,项目就不直接依赖于特定的“依赖性”提交(但仍然可以依赖于特定的库版本,因为版本依赖性也可以通过查找脚本处理,例如,请参阅,如果指定,它还可以处理所需的Boost库版本)。
- 如果您的项目
有助于回购D
和A
,您可以将它们添加为项目B
的子模块 但是,当您为projectD
签出特定版本时,无法同时将子模块签出到特定版本。解决方法是对D
和A
标记使用B
的相关版本,并执行脚本将D
和A
签出到相关版本 例如B
的D
是与v3.0
的A
和v1.0
的B
相关的版本,因此您可以在v2.0
和A
中添加版本为B
的标签。当您为v3.0.1.0
签出D
时,您可以运行脚本将v3.0
和a
签出到以B
开头的版本v3.0*
- 如果您的项目
未参与回购D
和A
,您可以删除子模块关联。来自B
和A
的代码就像项目B
的子文件夹一样,文件夹D
和文件夹A
的版本可以始终与项目B
的版本同步D
git checkout——递归子模块有什么问题??我想问题可能是,您可能最终会通过不同的中间依赖关系获取同一子模块的多个版本。确切地说是@axalis。也许我会添加一些自定义git挂钩。不确定。有一个不错的git从机项目,但现在看起来很老了是的,我正在考虑为它创建一个自定义脚本。以正确的方式命名它,可以让您将其用作git扩展:)是否使用git扩展取决于您操作git repo的工具。如果您使用git命令行来操作git repo,则无法使用git扩展,您可以直接执行脚本,将所有子模块签出到相关版本。