我正在尝试确定Web应用程序项目的最佳分支策略。这是我到目前为止提出的,我将非常感谢任何评论和经验。

我看到它的方式有两种主要的分支策略:“ by reakil by Release”和“ Branch by Feature”。

“释放分支”: :开发发生在树干上。当释放的时间临近时,将为该释放制作一个分支。然后对该分支进行稳定/测试,最后制定释放。发行后,将分支合并回树干,同时使释放分支保持生存以进行错误。是应用错误的固定,然后将其合并到后备箱中(如果中继线上的开发没有以其他方式黯然失色)。新功能添加到后备箱中,不会影响释放分支。当新发布时间临近时,创建了一个新的版本分支ASO

“分支划分”: :中继始终是“生产”中继线(现场代码)。 BugFix是直接致力于行李箱的。下一个版本的功能是在功能分支中开发的。bugfix不时合并到功能分支中。当发布时间到来时,特征分支将合并到后备箱中,生命周期仍在继续。

现在,我看到这两种策略之间的最大实际区别是,“按版本”可以维护您的软件的不同生产版本(当客户端A具有1版和客户端B版本1.5时,客户端是付费客户案子)。相反,使用“ By Feature”策略,您只能支持当前的生产版本(所有客户端都使用最新版本)。

因为在一个典型的 Web应用程序 所有客户端都使用相同的“最新”版本(因为它们都访问了同一服务器),所以我认为“按功能”方法是最常用的方法。它消除了“跨层次结构”合并的需求,例如,何时必须将BugFix应用于所有3个版本版本。

因此,我目前的状态是我应该选择“划分划分”。如果重要的话,我的团队不是很熟练。

有帮助吗?

解决方案

如果您随时只有一个发行版,并且在单个功能分支中进行所有开发,那么这些方法实际上是相同的。

如果您对您进行分支,则意味着立即有几个分支,我会像瘟疫一样避免使用它。更多的分支意味着更多的合并,这本身就是一种痛苦,而更多的整合地狱。将连续集成到单个代码线上要好得多。

如果您的部署过程比分支机构,测试,上线更多,那么逐个释放的优势是,您可以在不同的阶段中立即进行多个发行分支:一个人在必要时进行现场和错误。另一个正在稳定,测试,经过接受等,而开发在树干上仍在继续。另一方面,如果您有实时行李箱,一旦将功能分支合并为现场直播,就失去了对当前实时系统进行错误的能力。功能分支合并成为无回报的点。

其他提示

您正在开发哪种软件?收缩包装?开源项目?如果是这样,请使用“通过释放”或“不稳定的中继线”方法进行。尤其是如果您的释放周期每六个月到相隔一年。

但是,如果您维护一个基于网络的项目,该项目在较短的频率上进行了更改(例如每隔几周或更短的时间),则使用“通过功能”或“稳定的中继线”方法进行。这种方法的问题是集成了多种功能变化,这些更改使整个变化的变化使合并过程不如有趣。真的很困难。

但是这两个工作都很好,但是如果您两者都需要,该怎么办?也就是说,您有一个项目,部署每隔几周就会说一次,并进行了重大功能更改,但是您发现您有许多错误修复程序,您迫不及待地等待这些功能更改准备就绪。 TRUNK是您的释放分支,具有“划分”方法。如果您可以同时获得自己的分支,该怎么办?

看看这个 博客条目 合作网的鲍勃·阿切尔(Bob Archer)。他的敏捷释放策略为您带来了最好的两者。我用过了。它非常灵活。即使鲍勃在他的图中没有显示它,您也可以同时拥有多个释放分支。这意味着您可以拥有一个准备推出生产的释放分支,而另一种则准备用于最终质量检查。但是要考虑的两件事:

首先,您的开发人员合并有多好?即使是一支小型团队,您也不能自己执行敏捷释放策略方法。每个人都必须尽自己的一份力量,他们确实必须了解合并的合并和工具来合并。

其次,您将需要很好地了解准备就绪的变化以及即将发生的变化。发布管理是使这项工作像时钟工作一样的关键。每个功能都需要分配到发布分支并合并到它时。

无论您选择哪种方法,它都取决于您正在开发的内容以及为该开发的变化频率。

冒着进一步困惑的风险:您可以拥有释放分支机构 对特征分支进行所有更改。这些东西不是互斥的。

话虽如此,听起来您不需要平行的释放家庭,并且您想经常部署,甚至可能 连续. 。因此,您希望有一个“稳定的躯干”,您可以随时发布。功能分支有助于保持躯干稳定,因为在更改完成并已证明自己时,您只会合并回主干。

所以我会说您的选择非常合适。

这些选择不是相互排斥的 - 同时使用。 他们解决了不同的问题:

“释放分支” - 发行分支用于确保您可以返回用于生成当前的实时版本(或先前发布的版本)的源,而下一版本正在开发中。例如,这是为了更改当前开发中继线的错误修复版本或背面功能的发布版本。

“分支划分” - 用于始终保持稳定的开发行李箱,这对于多个开发人员和实验性的“也许”功能特别有用。

我会同时使用两者,但是如果它解决的问题不适用于您,或者您有其他问题的解决方案,则可以放弃其中一种方法。

我强烈建议使用诸如git或mercurial之类的现代DVC。它们适合并行开发,因此它们的存储变化与较旧的系统不同,这使得合并更为卫生。

我倾向于将git用于我的项目,但是我倾向于遵循的过程是这样的(并且也应该颠覆):

  • 对于每个新功能,为该功能创建一个分支。
  • 当一切工作时,将其合并到 staging 分支,并将其部署到登台服务器(您确实有其中之一,对吗?)
  • 一旦我们确定客户对分期的内容感到满意,我们将把分支分支合并为生产分支,将其标记为类似的东西 production_release_22 或者 production_release_new_feature_x, ,然后将该标签部署到生产服务器。

标签是 绝不, 曾经 更新 - 一旦部署了某些东西,它将保持这种状态,直到构建,测试和标记进行更多更改,然后部署新标签。通过确保是 标签 部署而不是 分支, ,我(或其他人)不做“我只需进行一次快速更改并在不进行测试的情况下更新服务器”之类的事情。

到目前为止,它对我来说很好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top