我们有六个项目使用由submodule处理的一些常见 subprojects ,现在我们选择使用git-subtree .

这些 subprojects 不是独立的,每个都有一个分支 master .

例如,这是 projectAprojectB 项目的样子:

projectA:
  |_.git/
  |_src/
  |_app/
  |_plugins
        |__subproject1
        |__subproject3
        |__subproject12

projectB:
  |_.git/
  |_src/
  |_app/
  |_plugins
        |__subproject3
        |__subproject8

我们在这里可以看到 subproject3projectAprojectB 之间是常见的 .

Usecase1

projectA 已将 subproject3v1.3.0 演变为 v1.4.0 .

subproject3 仍在项目 projectBv1.3.0 上,并且应该保持一段时间 .

但是,在 v1.3.0 projectB 内发现了一个错误 . 所以 projectB 应该修复而不检索 subprojectsubproject . 在同一时间, 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 .

这是 subproject3projectB 内)给出的 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

projectBsubproject3 设置为 master^^^^ ,而 projectAsubproject3 设置为 master . (不需要git-subtree插件上的标签)

所以,我们:

  • 修复 projectB 内的错误

  • projectB 创建git提交

  • push to master失败,这是正常的,所以我们推送到一个新的分支 hotfix

  • gitlabhotfix -> master )上创建合并请求并手动接受:(

  • 现在主人又安然了

这确实有效,但令我们恼火的是我们无法避免手动处理步骤4 . AFAIK,没有办法在git-subtree中自动化它 .

总而言之,我们对git-subtree非常满意,因为它允许我们(几乎)不会在git提交等方面处理插件,因为我们通过git-hooks自动化 git subtree push .

但是,手册 step 4 已经离开,到目前为止我们无法自动化它 . 有时,我们的一些开发人员忘记创建合并请求,因此 master 仍然容易受到攻击 .

有没有办法自动化 step 4 (理想情况下通过git-subtree)?我们有什么选择?