Merge 我应该为每个报告的新bug创建一个新分支吗?

Merge 我应该为每个报告的新bug创建一个新分支吗?,merge,branch,configuration-management,Merge,Branch,Configuration Management,我们使用JIRA作为我们的票务系统。新的错误/票据被提交到该系统。一旦一个bug被修复,我们就创建一个新的构建并在我们的开发服务器上测试它。如果一切正常,我们将其推送到实时服务器。现在我通常在没有分支的情况下处理主干来修复bug。这当然是个问题。因为我们的系统中可能有很多bug,但一次只能修复某些bug。但是,如果我将它们全部固定在主干中而不是分支中,那么即使我们没有足够的时间对它们进行测试,我们也必须对它们进行测试。您通常如何修复bug和分支等。。?(我不确定我是否解释得很好) 以下是我使用的

我们使用JIRA作为我们的票务系统。新的错误/票据被提交到该系统。一旦一个bug被修复,我们就创建一个新的构建并在我们的开发服务器上测试它。如果一切正常,我们将其推送到实时服务器。现在我通常在没有分支的情况下处理主干来修复bug。这当然是个问题。因为我们的系统中可能有很多bug,但一次只能修复某些bug。但是,如果我将它们全部固定在主干中而不是分支中,那么即使我们没有足够的时间对它们进行测试,我们也必须对它们进行测试。您通常如何修复bug和分支等。。?(我不确定我是否解释得很好)

以下是我使用的策略。我在主干中发育。当软件发布时,我将其分支(比如v1.0)。当bug出现时,修复分支主干,然后合并回主干。下面是可用策略的一个很好的概要:

我不确定这是否是正常的策略,但我们都在主干上工作,然后将错误修复向后移植到发布分支中。我们的主干总是“不稳定”的,当我们感觉主干处于可发布状态时,我们将其分支为一个发布分支。从那时起,buyfixes被移植回发布分支,新功能只会添加到主干中。这意味着您可以通过测试来运行发布分支,并专注于测试错误修复。

我不建议针对每个报告的错误进行分支。正如您所说,您可能不会决定修复报告中的每个bug,这意味着您在某个时候会有很多枯枝需要修剪


如果您的工具和语言支持它,那么针对您决定修复的每个bug(以及您决定实现的功能)进行分支并不是一个坏主意。它允许您在有预算和计划时开发和测试每个错误修复/功能,并在准备就绪时将它们合并回主干。

一种常见的操作模式是,部署的软件位于一个单独的分支中,该分支只接收错误修复。在哪里实际开发这些修复程序基本上是无关紧要的;为了避免干扰当前的开发,在“实时”分支上开发修复程序是有意义的,然后测试/提交/部署到实时系统,然后将修复程序重新合并到主干中。

我们将分支拆分为产品版本/发行版,以便每个发行版都有自己的分支。分支的版本已经过测试,因此我们只需要测试应用于该分支的修复程序

此外,每个产品版本都有一个dev和一个主分支。开发人员可以自由地提交到开发分支,而不必担心干扰发布(只有其他开发人员!)

我们也有同样的问题(或者几乎没有),我认为每个开发人员团队都有这个问题。不幸的是,根据经验,我还不能给你一个答案,而只能是一个理论上的答案

在我看来,只要是bug修复,就应该尽快部署它。 我将要实现的是一个特性分支策略和一个发布分支。 这意味着我们必须区分功能和bug。部署的是单独分支的(在我们的例子中,是标记的)

这样做,您仍然可以在主干上查找bug,并将它们部署到测试服务器,一旦测试和批准,将其分支到发布分支并部署。 您还可以将错误修复合并到功能分支中,或者稍后在计划将该功能部署到测试服务器时尝试合并该功能

无论如何,我认为最重要的是将长期工作分支,以防止部署较小的bug修复。
如果分支过多,则会出现合并问题。如果没有足够的分支,您将面临部署灵活性问题。

除非您使用的是分布式SCM(Mercurial,Git,…),在那里分支基本上是免费的,否则在每个bug上进行分支听上去是一项无法完成的工作

使用中央存储库SCM的通常策略是记录用于修复错误的修订,并针对使用更高版本生成的版本进行测试。然后可以将相关修订合并回发布分支


我们正在使用mercurial,分支来修复bug,然后将更改合并回来在分布式SCM中是非常可行的,这取决于您的版本控制系统。如果您使用的是git,它的分支比较便宜,合并也很容易,那么我肯定会为每个补丁创建一个新的分支。这使您能够使bug修复彼此独立,从而在将什么合并到主/主干以及何时合并方面具有更大的灵活性


另一方面,如果使用Subversion,分支的成本更高(在创建和切换/更新方面),合并也更困难。通常,一个新分支的成本/收益比不够高(特别是对于小错误),因此不值得。您是否修复了同一分支中的多个错误?@vikasde:如果系统有一个测试环境(如果它是一个“严重的”或一个做得很好的项目),那么是的。每次提交都必须在提交之前通过回归。所有与特定版本相关的错误都应该在版本化分支中修复,并且在成功进行QA后,合并回主版本,以便下一个版本不会包含相同的错误。@Greg:您如何决定哪些错误进入哪个版本?假设我刚刚推出了V1.0,它在服务器上运行。所有新的bug都进入V1.1吗?我们在这里做的是修复V1.0分支中的bug,以及QA合并到main之后的bug。当我们决定向客户推出修复程序时,我们将v1.1从v1.0分支并锁定v1.0分支。我们会继续这样做,直到v2.0出局(从main分支,它包含v1.x的所有错误修复和新特性)。当你开发一个项目时,通常每个“正在开发”和“仍然支持”的项目版本都应该被修复。需要在代码中做一些小改动的错误,可以是directl