我们需要改进Git流程设置,因为我们目前在公司面临几个问题。
我们当前的生命周期:
master
分支release/2018-xx
master
master
并将它们分别编入release/xx
release/xx
投入生产
我们面临的问题:
1)即使我们有一个“稳定”版本,其中我们只添加 错误修正,我们仍然为所有五家公司执行此操作,有时其中一个公司的错误修正会破坏另一个公司的功能(=> ;创建四个发布分支并将所有固定分配到所有五个中将非常耗时)
2)我们必须每天从master
挑选20多个修复程序到release/2018-xx
并修复很多冲突(替代方法是从发布分支中修改bug修复,但我们会面对冲突然后变成主人)
有没有办法处理这么大的流量?
答案 0 :(得分:2)
需要考虑这个问题的几个方面:
鉴于您需要建立以下两件事:
在选择发布周期时,您正在处理的主要权衡是:版本控制方案是:
让我们首先深入了解版本控制方案,因为这是最简单的方案。在定义之后,我们可以讨论一个免费的分支策略,最后是一个满足您需求的发布周期。
有一种定义明确的版本软件称为semantic versioning。语义版本控制背后的主要思想是软件版本由三部分组成:
这三个版本是数字并与点组合。 {Major Version}.{Minor Version}.{Path Version}
。
有效语义版本的示例是:1.0.0,2.1.0,11.1.133
主要版本更改表示发生了向后不兼容的更改。具体来说,我们假设您的产品目前是1.0.0版。并且您决定进行一系列更改以删除功能或更改现有功能的工作方式,并且您希望发布此新版本。由于您进行的更改可能会破坏软件的现有用户,因此需要增加主要版本,以便新版本的产品为2.0.0。同样,如果您的更改不会破坏旧功能,那么当您发布下一版本的软件时,您可以保留相同的主要版本。
次要版本更改表示已添加新功能,并且所有内容仍向后兼容以前的版本。所以,让我们假设您有一个1.0.0产品,然后添加一个新的按钮来做一些很酷的事情,但其他一切工作完全一样。那么产品的下一个版本应该是1.1.0。
补丁版本更改表示已修复一个或多个错误。没有添加任何新功能,也没有更改现有功能。
这些是用户选择版本的可能动机:
有一种非常常见的分支策略可以补充语义版本。一般的想法是,对于每个唯一的主要和次要版本对,您创建一个发布分支。例如,如果您有以下版本:
您将维护以下git分支:
这些发布分支中的每一个都基本上具有与最新补丁版本对应的代码:
您还有一个主分支,其中包含正在开发的最新代码。
注意:没有分支的破坏。当你继续为它们添加bug修复时,这些分支会一直存在。
现在我们有了分支机构,让我们说1.1.2中有一个错误。您将把修复程序放入release-1.1分支。在版本1.1分支中将版本增加到1.1.3并释放产品的1.1.3。如果用户想要1.1.2版的最新错误修复,则必须升级到1.1.3。 注意:在这种情况下,您不会创建新分支。
我们假设您正在努力添加一些新功能,而不是破坏向后兼容性。在您的功能准备就绪之前,请将您的提交推送到主分支。在主分支中完成功能后,请执行以下操作:
假设您正在处理向后不兼容的重大更改(删除旧功能并更改现有功能的工作方式)。将您的提交推送到掌握,直到您认为一切都已完成。
以上一切都很好,但你多久发布一次功能?你支持他们多久了?这取决于您的客户。
一些正常发布时间表的一些想法如下:
您支持特定主要和次要版本对的时间取决于您的客户。它们是一个发展缓慢的企业,需要为特定版本提供至少4年的支持吗?如果是这样,您可以减慢Minor和Major版本的速度,以减少必须维护的版本数量。
他们是快速移动的初创公司吗?如果是这样,您可能只支持6个月或一年的特定主要和次要版本对,并要求用户升级到更高版本以获得支持。
还有更多的角落案例和需要考虑的事项,但这是对要考虑的事情的一个很好的概述。希望它有所帮助。
答案 1 :(得分:0)
release/xx
为五家公司提供相同的发布版本。根据您的工作流程,似乎所有五家公司的代码都相同。为此,您可以使用以下工作流程:
develop
分支:所有开发人员在此开发中开发并推送他们的代码。如果您没有此分支,请从master
分支创建它。master
分支:开发人员创建拉取请求以将develop
分支合并到master
分支。 QA团队(或其他人)可以测试并批准将develop
分支合并到master
。将develop
分支合并到master
分支后,master
分支上的版本实际上已准备好发布。然后,您可以通过添加标记(例如git tag -a v1.0 -m 'release version 1.0'
)来记录发布版本,也可以通过从release/xx
分支创建发布分支master
来记录发布版本。release/xx
来记录master
分支机构的发布版本,则每次发布时都会将r elease/xx
分支机构发送给五家公司。hotfix
分支:如果需要修复错误,您可以从相关的hotfix
分支创建release/xx
分支。修复hotfix
分支上的错误后,将hotfix
分支合并到master
进行测试。如果已准备好发布,则从release/xx
分支为新版本创建新的master
分支。develop
分支更新到最新版本:每次发布新版本后,将master
分支合并到develop
分支,以便所有开发人员可以继续他们的最新工作版本此外,还有a successful branching model,您也可以参考。