2014-02-28 43 views
4

目前,我的团队正在寻找敏捷的git分支策略。我原本以为我们可以按照这篇文章:http://nvie.com/posts/a-successful-git-branching-model/,但不幸的是,我们常常推动生产,以至于无法在具有多个任务的分支上工作,直到它稳定(下一个发布分支策略)。此外,通常情况下,只需几天即可完成的问题需要一段时间才能解决,因为优先级变化。因为我们没有时间去处理这些长时间运行的任务,所以他们坐在开发者或下一个版本分支中,让位于打破生产的可能性。如何使用git执行每个任务策略的分支

我想采用每个任务分支策略,并想知道它如何使用git完成。我不只是在谈论功能分支,而是你分配的每个单独任务的分支。此外,由于您的任务分支将成为您的开发分支,因此不会有开发分支。拥有一个开发分支会促使开发人员直接致力于该分支,从而导致我们的主要分支开放问题。

我想出了这一点:http://imgh.us/ProtectedMasterBranch.jpg

我相信,采用该策略将保持主枝干净,也将占到开发商时不在身边来完成他们的任务,我们做一个推到生产前。

背后的主要思想是主分支是一个受保护的分支,没有开发分支。由于主分支受到保护,因此会强制您为单个任务创建分支。为了重新合并,您必须向管理员请求合并。我们将标记每个发布到生产中,并且修补程序也将从主分支中分支出来。我们有四个测试站点,可以用来测试不同的任务分支。

我还没有看到这个战略的任何例子,所以我希望得到一些反馈,我在这里有什么。

UPDATE

所以我知道它已经有一段时间,因为这个问题被张贴,但如果有人正在寻找类似的策略似乎是GitHub的已经通过了here

在此先感谢。

+0

该图不可读。你也许应该把它链接到一个全尺寸的版本。 –

+0

我没有链接到图像。 –

+0

我现在*链接到图像。 –

回答

5

你提到的git流模型是专门为解决你的问题而设计的:)。虽然它显示提交到develop,但所有任务都应在其自己的功能分支中完成,并且只有在完成并测试后才合并回develop。这样你就知道你总是可以从develop(即合并成主控和标签)发布,所以它支持定期和连续发布。

分支每任务工作真的很好,因为分支很便宜。我们也使用我们的问题编号作为前缀,因此git flow feature start PR-123_make-widget有一个可用的分支名称,但也突出显示了我们的JIRA中的PR-123问题。

遵循如上所述的git-flow方法可以为您提供一个稳定的开发分支(或者如果您正在开发一个主要的新版本分支以及develop,也可能有多个稳定的开发分支)修复后直接应用于master,然后合并回develop

对于您的'合并请求',您可以使用pull请求(如果您使用的是Github,Stash,Bitbucket等),或者您可以使用像Gerrit这样的工具。

有一个合理的说法,其通过了所有测试应合并回任何分支自动发展,在这种情况下,你可以尝试每次提交的特性分支微评论做。有很多选择!

更新 如果你要坚持你的建议模型,我会建议考虑你的发布周期如何工作。该版本是否包含标记和推送,或者您是否冻结了一段时间以执行额外的质量检查?你以后可以这样做吗?如果答案是'是'或者'可能',那么你不应该从主发布,而应该创建发布分支,执行最后一分钟的修复,然后标记和推送。不过,不要忘记重新合并。

更新 如果你正在使用它似乎会master分支没有实际意义的一个分支,每个任务的策略。如果您正在进行连续发布,那么每个稳定的开发分支构建都会自动部署到您的生产环境中,这可能是正确的。在将构建升级为生产的环境中,如果没有发布阶段,即升级不涉及任何其他提交,则可能不需要额外的分支。当你有一个释放阶段,其中最终发布的修补程序(部署问题,最后一分钟臭虫等)和一般看家develop/master分支策略的真正好处,如版本号凸点在瞬态release分支了。

使用发布分支,然后合并结果表明,到主分支意味着你可以继续合并稳定功能回到发展,即使你的版本尚未完成。

这也是相当不错的在主分支单提交点,每个代表提交的释放,但是这是一个纯粹的审美理由这样是不是真的那么有效:)。

+0

感谢您在这里的建议:)。目前我们没有冻结功能,一旦问题得到解决并进行测试,我们将其转移到生产中。我不确定功能冻结是否是我们将来要实现的功能,但绝对是值得提出的。 –

+0

如果我们使用每个任务的分支策略,那么这不会使开发分支不相关?把它留在那里只是增加了一个不必要的步骤,就是必须重新合并你的任务分支。另外,有一个开发分支会促使开发人员直接向该分支提交,从而导致我们主分支中的问题。 –

+0

@ ThePaxBisonica我已经更新了我的答案,以讨论master/develop分支。 – spikeheap

1

我想通过每个任务战略的一个分支,想知道它是如何使用Git

Git的轻量级分支已与恰好考虑到这一点而专门设计,可以和最好之前已经完成应该为每个单独的主题创建分支。

以下是相当主观的。你指的是成功的分支模型是成功的,因为它的简单的常识(和调用它成功的营销世界保证分支和合并是不可怕的话)。我自己的证据是传闻,但按理说,大家谁与许多开发商有足够大的项目中使用混帐自然有发布发展阶段featureXfeatureY等分支机构,或它们的变体,它们之间具有共同的和标准化的流动。

你的流量,如图表所示,有道理,一只鞋不适合所有人 - 你不应该害怕在必要时偏离成功的git分支模型

尽管如此,与每一个这种流动的主要问题是什么是你的分期,QA和发布策略。修复bug,开发功能,无论是在主题分支还是常见分支,都不是什么问题,代码就是代码。而git非常擅长在分支之间移动代码,将其分割为新的分支,倒回到代码的旧状态等等。

因此,您如何计划QA并发布代码?你有什么资源限制? (构建时间,网络服务器,嵌入式线束,测试场,CI构建和测试盒等)就如一个例子,如果分支和移动代码很便宜,但建设或重建分支需要8个小时,每一个微小的变化分支是没有意义的。你的流程必须考虑这是一个成功的。

+0

我绝对同意这款鞋不适合所有评论。尽管我们在git流模型方面取得了巨大的成功,但仍有一些用例可能会过度或不能解决问题。当作者说“成功”时,他们只是说它对他们和他们的使用案例是成功的。也就是说,如果Github和Atlassian这样的组织成功使用它,那么花费一些时间来理解*为什么它不适合你,并且可能在发明新解决方案之前改进你的开发过程 – spikeheap

+1

@spikeheap [呼吁权威](http://en.wikipedia.org/wiki/Argument_from_authority),你不爱他们......如果Atlassian正在成功使用“it”,OP为什么要使用它?请说明依靠这个事实的巨大安慰。 – mockinterface

+1

我想这是[不发明](http://en.wikipedia.org/wiki/Not_invented_here)对不对? OP没有**可以使用它,但是如果你没有花时间去理解你自己选择实现它的理由,那么你需要花时间去做一些真正的存在 - 开发软件。此外,像Atlassian这样的公司通常是良好的软件开发实践的灯塔,向他人学习是我们开发的方式! – spikeheap