这是我的问题-我的代码库必须部署到三个不同的环境中。 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)在运行时得到解决(还有其他问题和复杂因素可能使之无法实现)。我相信我可以长期探索这种方法,但是我也有短期的需求,需要建立工作流程,以便人们可以开始使用这些版本,以便我们在现场进行测试。不久的将来。
任何想法都会受到赞赏。
答案 0 :(得分:0)
您的问题是使用submodule的理想之地。
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只需创建子目录并保持每个紧密合作的传统就容易得多。