我们有六个项目使用由submodule处理的一些常见 subprojects ,现在我们选择使用git-subtree .
这些 subprojects 不是独立的,每个都有一个分支 master .
例如,这是 projectA & projectB 项目的样子:
projectA:
|_.git/
|_src/
|_app/
|_plugins
|__subproject1
|__subproject3
|__subproject12
projectB:
|_.git/
|_src/
|_app/
|_plugins
|__subproject3
|__subproject8
我们在这里可以看到 subproject3 在 projectA 和 projectB 之间是常见的 .
Usecase1
projectA 已将 subproject3 从 v1.3.0 演变为 v1.4.0 .
subproject3 仍在项目 projectB 的 v1.3.0 上,并且应该保持一段时间 .
但是,在 v1.3.0 projectB 内发现了一个错误 . 所以 projectB 应该修复而不检索 subproject 的 subproject . 在同一时间, v1.4.0 应该得到与 v1.3.0 相同的修复 .
使用子模块
我们曾经 :
-
在 subproject3 中创建新分支 hotfix/bla
-
修复了这个bug
-
根据修复提交创建标签 v1.3.1
-
将修补程序合并到master中
-
创建标签 v1.4.1
-
切换到 v1.3.1
-
在 projectB 中提交新的 subproject3 版本
-
之后,我们在项目 projectA 中将 subproject3 的版本设置为 v1.4.1 .
这是 subproject3 ( projectB 内)给出的 git log --decorate --all --graph
.
* f923c0d (tag: v1.4.1, origin/master, origin/HEAD, master) Merge branch 'hotfix'
|\
| * cb8213d (HEAD, tag: v1.3.1, origin/hotfix, hotfix) fix #4.1
* | bfb3008 (tag: v1.4.0) [plug1] #8
* | 25ccbbd [plug1] #7
* | ff22c34 #6
* | cb9f3ab #5
|/
* 1e750fe (tag: v1.3.0) #4
使用git-subtree
projectB 将 subproject3 设置为 master^^^^ ,而 projectA 将 subproject3 设置为 master . (不需要git-subtree插件上的标签)
所以,我们:
-
修复 projectB 内的错误
-
为 projectB 创建git提交
-
push to master失败,这是正常的,所以我们推送到一个新的分支 hotfix
-
在gitlab( hotfix -> master )上创建合并请求并手动接受:(
-
现在主人又安然了
这确实有效,但令我们恼火的是我们无法避免手动处理步骤4 . AFAIK,没有办法在git-subtree中自动化它 .
总而言之,我们对git-subtree非常满意,因为它允许我们(几乎)不会在git提交等方面处理插件,因为我们通过git-hooks自动化 git subtree push
.
但是,手册 step 4 已经离开,到目前为止我们无法自动化它 . 有时,我们的一些开发人员忘记创建合并请求,因此 master 仍然容易受到攻击 .
有没有办法自动化 step 4 (理想情况下通过git-subtree)?我们有什么选择?