【发布时间】:2015-09-21 14:15:45
【问题描述】:
我有大约 20 个不同的存储库。许多是独立的并作为库编译,但其他一些在它们之间具有依赖关系。依赖解析和分支很复杂。
假设我有一个超级项目,它只聚合所有其他存储库。它专门用于运行测试——这里没有真正的开发。
/superproject [master, HEAD]
/a [master, HEAD]
/b [master, HEAD]
/c [master, HEAD]
/...
现在,要为每个功能开发特定功能或修复 (a),尤其是需要特定版本的项目来编译或运行的功能或修复(b v2.0 和 c 3.0),我必须创建一个新分支:
/superproject [branch-a, HEAD] <-- branch for 'a' project
/a [master] <-- new commits here
/b [v2.0]
/c [v3.0]
对于b,可能需要其他内容,例如a v0.9 和c v3.1:
/superproject [branch-b, HEAD] <-- branch for 'b' project
/a [v0.9] <-- older version than 'a'
/b [master] <-- new commits go here
/c [v3.1] <-- newer version than 'a'
在实现涉及功能分支、修补程序分支、发布分支等的常见 git 工作流时,这变得更加复杂和复杂。我被建议(并建议不要)使用 git-submodules、git-subtree、google 的 git-repo、 git-slave等
对于如此复杂的项目,我该如何管理持续集成?
编辑
真正的问题是如何在不模拟所有其他依赖项目的情况下运行测试?特别是当所有项目可能使用不同的版本时。 Trigger Jenkins tests after commits in git submodules
【问题讨论】:
-
我实际上不鼓励这样的架构。拥有这样的存储库只会让维护者感到困惑,而且测试确实应该按项目进行。
-
上面的各个文件夹是不同的 .git 存储库,而不是一个单一的大存储库 - 否则它们不能有不同的分支和标签。
-
真正的问题是如何在不模拟所有其他依赖项目的情况下运行测试?特别是当所有项目可能使用不同的版本时。
标签: git git-submodules git-subtree git-repo git-slave