如果一个分支策略由n 个特征分支组成,一个“主”(主线)和一个“集成”分支。集成分支的目的是什么?为什么不能对特性分支本身进行测试和集成?
3 回答
因为它是一个功能分支。它应该只包含与一个功能有关的更改。集成分支是您在最终推送到 master 之前将多个功能组合在一起进行测试的地方。
当然,您不必以这种方式分离事物。您可以在功能分支上进行集成,就像您可以在 master 上完成所有工作一样。但是关注点分离是一件好事。
更具体地说明为什么“分离是好的”:集成分支的目的是确定新功能是否不仅可以单独工作,还可以与其他新功能结合使用。这意味着它们可能不会,这些功能可能会导致需要一段时间才能解决的冲突。
但是,您仍然可能希望开始将新功能的子集部署到主线分支,因此您不会因为其中两个不兼容而阻止所有功能。
现在,如果您已经将功能分支合并到另一个中,您将很难将它们单独合并到主线中。这并非完全不可能,但这肯定很麻烦(我已经尝试过)。
如果您的功能分支包含主要的代码搅动,或者如果它们在正在处理的代码区域中有显着重叠,您甚至可能希望进一步采用这个想法,并在将两个功能合并到其他任何地方之前将它们集成在一起的分支,包括全球集成分支,即具有多个集成级别。当然,这通常不是一个理想的情况,但您可能无法避免它,如果您对集成分支慷慨,那么由此产生的冲突可以更容易解决。
我经常看到需要“集成”分支的一个主要原因是当您的功能分支无法自行测试时。以我的经验,这通常是由于数据库依赖性。或者,考虑一个由数据库支持的网站项目......假设它是一个托管在 BEA Weblogic 中的 JSP 应用程序,由一个 60GB 的 Oracle 数据库支持;为每个功能分支提供自己的 BEA Weblogic 和 Oracle 实例来进行测试需要大量硬件。相反,尽可能最好地开发到功能分支中通常更容易,但转移到集成分支中进行完整的 QA 测试,其中 QA 需要在完整的 Web 服务器和数据库上执行。