开发分支与功能分支类型有什么区别?

37

这些似乎只是随意的,尽管常见的Git分支名称。通常,“master”是主分支(SVN中的“trunk”),所有其他分支最终都会合并到该分支中。至于其他名称,它们似乎很容易理解它们所服务的目的。 - Tim Biegeleisen
3个回答

51

针对Git工作流程,如[1]所示:

  • feature:所有的功能/新功能/重构都在feature分支上完成,它们从develop分支分支出来,并在某种同行评审后合并回develop分支。
  • release:当积累了足够多的功能或临近下一个发布时间时,会从develop分支创建一个新的release分支。该分支专门用于测试/修复bug和进行必要的清理(例如更改一些路径名、不同的默认值进行仪表化等)。
  • master:一旦QA确认质量满意,将release分支合并到master分支中(同时合并回develop分支)。这就是向客户发货/使用的版本。
  • hotfix:如果发布后发现了一个严重问题,则在master分支上开发修复程序的hotfix分支。这些是唯一从主分支分支出来的分支。
  • 注意:任何在master分支上的提交都是合并提交(来自releasehotfix分支),代表向客户发布的新版本。

请注意,这个模型主要适用于a)遵循传统发布版本控制的b)大型软件项目和c)有单独的QA团队。许多受欢迎的GitHub存储库遵循更简单的模型。


15
masterrelease之间的区别在于master分支是您的客户/用户正在使用的分支。它是实际安装或销售的分支。
在许多团队中,master分支(通常也称为main)也是release分支。但这并不总是如此。在大型公司或拥有独立测试或QA部门/团队的公司中,主分支是销售给客户的分支,而发布分支是正在进行测试的分支。请注意,对于某些项目来说,进行完整测试可能需要一周或更长时间,因此有一个测试人员可以测试但稳定的分支是有意义的(开发人员不会不断推送更新)。 featuredevelop之间的区别也源于同样的原因。 develop分支(通常命名为developdev)是稳定的开发者分支。在传统的源代码控制软件中,develop分支是您的仓库服务器。它是所有开发人员共有的分支。它是您开始开发的分支。
另一方面,特性分支是你自己的个人分支。在开发特性/故事/模块时,你当然会频繁修改代码。为了充分利用Git,你应该尽早提交并频繁提交。但是,你正在开发的代码在定义上是不稳定的(未最终确定),可能会对其他开发人员造成破坏性的变化。因此,你应该在自己的分支上开发(从develop分支分叉出来),直到你的代码准备好合并回develop分支。

@MikeMB:啊,是的。搞反了。 - slebetman
为什么不使用“devel”而不是“develop”,因为它是一个非常常用的缩写? - nowox
1
@nowox:开发分支有几个常见的名称:devdevelopmain等。它们都是开发分支。这是一个概念。你给开发分支起什么名字取决于你。 - slebetman
所有这些约定(与Git本身无关)不都是吗?也许需要明确提到GitFlow(由于拼写不清楚,问题不明确)。 - Peter Mortensen
@PeterMortensen:该问题有一个git-flow标签,这是一种工作流程(约定),通常被认为是大多数git项目的“标准”工作流程。是的,它与git无关,但它与git-flow有关。阅读此内容以获取原始提案:https://nvie.com/posts/a-successful-git-branching-model/ - slebetman

7

只是因为还没有人清楚地表述,这会回答我的问题...

MasterRelease 类型有什么区别?

FeatureDevelop 类型有什么区别?

实际上并没有区别。

分支名称是由团队制定的约定,而不是Git强制执行的规则。

Git不在乎你如何命名你的分支、创建多少子分支、何时合并它们等。对于Git来说...

一条分支就是一条分支,没有任何区别。

许多团队的分支名称遵循明确定义的约定,只是为了方便共享理解...但正如我们经常看到的那样,你的约定对于技术并不重要。将一个概念赋予意义需要人类,所以请根据你的理解自由地命名分支。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接