git 有两个主分支的流,可能吗?

git flow with two master branches, is it possible?

我在一个有奇怪分支方案的项目中工作。假设这是一个包含几个网站的共享项目存储库(下面只是一个示例):

从上面的站点来看,web1、web2、web3 具有相同的功能,web4 与其他站点具有相同的功能,但有一些变化。之前的团队结束了为 web1、web2、web3 构建了一个 master 分支,为 web4 构建了一个 web4_master。以下是分支的示例:

λ git branch
* web4_master
  master
  develop

我想在这里使用 git-flow ,就像我对其他具有正常分支方案(意味着只有一个主分支)的项目所做的那样,但在这种情况下,我必须主主分支,有时代码会出现掌握或 web4_master 或两者兼而有之。有什么方法可以使用 git-flow 来处理这个问题吗?或者我是否必须依赖于旧方法,这意味着将更改手动合并到任何地方?

由于 web4 包括其他站点的所有更改,我将按如下方式构建存储库:

  • 一个 master 分支正常
  • master 正常 develop 分支
  • web4_mastermaster
  • 的分支
  • web4_developweb4_master
  • 的分支

如果一个功能适用于所有站点,那么工作将在 develop 的功能分支中完成,例如 "normal" git-flow。最终,这将准备好发布并合并到 master.

如果一个功能只针对 web4,那么工作在 web4_develop 的功能分支中完成,并最终合并到 web4_master

基本上,有两种 git-flow 发生 - 一种用于所有站点,另一种用于 web4 特定事物。

最后一块:

在所有站点的发布过程中(或任何对您最有意义的时候),web4 需要获取最新发布的更改。

  1. web4_master 重新设置为 master。这里可能会出现冲突,按需解决
  2. web4_develop 重新设置为 web4_master. This will NOT be a standard rebase and will need to make use of the--onto` 标志以避免重复提交。详见this
  3. 对任何 web4 in-progress 功能分支重复步骤 2 到 web4_develop

本质上,这是将 web4 树视为来自 master 的长 运行 特征分支。


如果 "all sites" 功能有重大变化,或者变化非常普遍,我不推荐这样做,因为冲突解决会变得很烦人。

在那种情况下,我会推荐您手动合并更改到两个根分支的解决方案。


也有可能这种方法有意义/使用合并策略更容易,但我不喜欢这样的方法。