我们正在尝试遵循gitflow分支模型,但有一个转折。
我们有四个可以部署产品的服务器环境,每个服务器都有一个目的:开发,内部测试,外部测试和生产。
我们正在努力使合并/冲突解决尽可能简单,因此我们创建了两个额外的分支,这些分支不是gitflow模型的一部分。
正常的gitflow分支
但这两个分支也不标准,可能需要改变......
然后过程如下:
我们是否搞砸了整个gitflow模型?
答案 0 :(得分:9)
要回答您的问题,请不要搞砸gitflow模型 - 更多地扩展它以满足您的需求。
通过将环境耦合到给定的分支,您可以在构建版本时为自己提供更大的灵活性。即假设您有两个非依赖功能(功能1和功能2)正在进行中,这两个功能已合并到您的“测试服务器”中。科。如果功能1测试失败,功能2仍然可以在没有功能1的情况下进一步发展 - 这是因为您合并到了测试服务器'是一种单向合并 - 没有任何结果,没有历史。相反,您的功能2分支将合并到“开发”中。并最终'掌握'。
我们正在为自己采用/制定类似的策略。 我们的关键要求是容纳不可避免的樱桃选择功能。请注意,我们的解决方案虽然相当复杂,但它是为企业应用程序设计的,可作为多个业务所有者拥有的多个服务的平台,并利用多个内部框架。
这些环境分为两类,即“测试中”(QA,舞台和UAT)和“生产”。 (BETA和LIVE)。
功能优先级可能经常发生变化,从测试问题到监管限制/请求。为了适应这种情况,创建了多个分支来表示环境/类别,如下所示:
我们还根据需要使用Master的HotFix分支,并在“预生产”中准备生产版本。分支(纠正错过的版本增量等 - 次要的东西)。
我们始终从Release-Candidate分支新功能,因为此分支始终包含“承诺生产”和“#39;特征。一旦做出生产承诺,任何事情都无法超越。
一旦功能准备好进行测试,它就会合并(单向)进入' Stage'。这会触发CI构建并部署到QA。
如果QA服务器看起来稳定,开发人员会触发自动部署到舞台。
如果需要更改,请在功能中进行更改并重复。如果可以进行业务测试,则从Feature合并到UAT。这部署到UAT。
如果功能未通过业务测试,则对功能进行更改并重复。如果功能延迟,则不采取任何措施。如果功能正常并签名,则合并到Release Candidate。
一旦收集(1个或多个)功能在Release-Candidate中,通过从Release-Candidate合并到Master(通过Pre-Production)来触发生产部署。
部署失败,然后是HotFix。如果没问题,请部署到Live。
我们使用TFS的工作流程如下所示:
最后,对环境/类别的每个部署都将如下所示:
答案 1 :(得分:0)
Git是一个版本控制系统。它维护源代码及其更改。开发在开发阶段停止。之后,源代码不应该改变。
当你将项目移动到下一个阶段(测试,发布,产品)时,你不应该提供源代码,而是从标记版本构建二进制文件,因为:
所以它可能不会干扰git-flow模型,但我认为这些点值得考虑。 实际上,我并不是git-flow策略的忠实粉丝。如果你有一分钟的时间给这些机会:
https://barro.github.io/2016/02/a-succesful-git-branching-model-considered-harmful/ https://trunkbaseddevelopment.com/