寻找支持嵌套开发分支的git工作流程

时间:2019-02-11 00:53:17

标签: git git-flow

这是我的问题-我的代码库必须部署到三个不同的环境中。 90%的代码是通用的。其余的10%对于每个环境都是唯一的。我想使用git-flow工作流(主,开发),但是我感觉需要第二层“开发”分支(develop_a,develop_b,develop_c),它们是从“开发”分支的。如果要这样做,我可以在“ develop”中进行通用代码更改,然后定期将开发更改合并到developer_a,develop_b和develop_c中。同时,我可以在这些分支中的分支中处理特定于developer_a,develop_b和develop_c的问题。

使用这种方法使“主”分支从可以发布软件的位置来看几乎没有意义。 develop_a,develop_b和develop_c是包含要为每种环境发布的完整软件补充的分支。我试图找出是否有一些建立工作流程或最佳实践对此提供支持。我认为a,b,c的不同存储库没有意义,因为大量的通用代码。

我认为更好/更长期的解决方案是重构代码,以创建支持developer_a,develop_b和develop_c唯一性的接口和类,并部署版本(a,b,c)在运行时得到解决(还有其他问题和复杂因素可能使之无法实现)。我相信我可以长期探索这种方法,但是我也有短期的需求,需要建立工作流程,以便人们可以开始使用这些版本,以便我们在现场进行测试。不久的将来。

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

您的问题是使用submodule的理想之地。

  • 为90%的通用代码创建一个存储库。
  • 为单个代码再创建3个存储库。他们每个人都做git submodule add [url to common repo]
  • 现在将每个代码片段推送到相应的存储库。这将需要一些重构。
  • 从现在开始,请勿触摸“个人”存储库中的通用代码。
  • 更改通用代码库后,您可以推送到通用存储库。然后,在每个单独的列表中,以git submodule update更新。
  • 克隆包含子模块的存储库时,您
    • 克隆存储库(包含子模块的空文件夹)
    • git submodule init
    • git submodule update

然后,您将部署各个存储库。现在,它们在一个可运行的混合物中包含通用代码以及单个代码。因此,您可以使用所需的任何分支方案。

答案 1 :(得分:0)

我不确定除了使用git-flow方法外,您根本不需要做任何事情。

通过阅读您的文章,我给您的印象是,您拥有一些核心代码和一些特定于平台的代码,并且它们混合在一起(因为您提到了将它们分开的重构)。

我还给人的印象是,特定于平台的代码位彼此正交,也就是说,特定于平台A的代码对平台B无效,等等。

因此,在我看来,如果您让开发人员对核心代码进行更改,则他们需要在所有平台上进行测试,以确保他们没有错误地将其设置为特定于平台。因此,尽快共享核心代码是一个胜利。

如果我的理解是正确的,请考虑仅维护一个存储库,但在构建系统中设置三个不同的目标{platform-A,platform-B,platform-C}。这样一来,您的开发人员就可以在核心更改上相互合作,并可以在发生任何提交时自动在所有平台上测试代码。

稍后,如果将代码重构到可以分离出特定于A / B / C的代码的程度,那么创建子模块可能是有意义的。但是我仍然不明白为什么。 IMO只需创建子目录并保持每个紧密合作的传统就容易得多。