GIT分支版本管理

目前常用的git分支管理实践有三种,即单主干(Trunk-Based development),GitHub Flow与GIT Flow三种。

TBD与SVN类似。开发和修复均在trunk上进行,按照周期打出Tag。发布首选Tag,如Tag不满足需求,则从trunk上打包发布。

GitHub属于双分支体系,一个是Master,一个是开发分支,master提供生产系统的发布,开发分支用于开发提交;任何修改、开发、功能都在从Master分支拉出的新分支进行,新分支代码完成通过测试和代码审查后,合并入master部署发布。

早期的OA发布是一种变体的GitHub,即所有开发人员共用develop分支,test系统由develop打包,测试完成后合并至master。图示如下:

OA开发是一个长期的较长版本发布周期的持续集成、随时发布的项目。GitHub并不适合。而另外一种Git分支管理即Git Flow概念的核心则是版本发布,适用于持续集成、随时发布的项目。原生的Git Flow包括五种分支,master\hotfix\release\develop\feature;develop上为下一个版本将要发布的内容;当一个新功能需要开发时,从develop上新建feature分支,开发完成后合并至develop,删除feature;当需要发布时,从develop拉出release分支,在release上打包部署测试,需修复时,直接在release上提交,修复后再次打包部署测试;当release上通过测试后,将修复合并至develop和master,生产则从master打包。

我们所采用的变体的GitFLow图示如下:

正如《Git 分支管理最佳实践》一文中所述的“每个开发团队都应该根据团队自身和项目的特点来选择最适合的分支实践”、“首先是项目的版本发布周期。如果发布周期较长,则 git-flow 是最好的选择。git-flow 可以很好地解决新功能开发、版本发布、生产系统维护等问题;如果发布周期较短,则 TBD 和 GitHub flow 都是不错的选择。GitHub flow 的特色在于集成了 pull request 和代码审查。”。我们对Git flow进行了变体。将feature与develop合并为develop,只采用git flow的四个概念,即master hostfixes,release和develop。

各个分支作用

Master分支 :仅用于正式环境发布重大版本 (体现在正式环境)

Hotfixes分支:仅用于正式环境版本发布后修复正式环境BUG(当bug修复完成需合并至develop(或者release分支)程序员不应该去合并master分支当bug解决完毕后并且测试人员测试认可后才可以合并至master分支上。

Release 分支:预发布分支,当确定预发布时间后打包预发布版本,打包后在预发布版本上测试测试后问题将在预发布分支上解决测试完全没有问题后合并至master 及develop分支上(体现在oarelease环境)

Develop分支:日常开发分支,日常新功能开发在此分支上但其他分支所做的操作最终都会合并在此分支上(体现在oatest环境)

整体发布步骤:

1.项目经理确定发布新版本时间,确定后在Release 分支上打出tag标签确定版本。

2.测试人员根据release版本的功能验证,及测试,测试出现问题后提bug,并附带版本

3.开发人员分配到bug后切换Release 分支上修复bug,只修复bug提交

4测试人员根据jira提交情况在Release 分支上进行更新并且验证新版本bug

5.当验证完毕后,将release分支合并至master分支及Develop分支。

6.正式环境打包更新

异常发布步骤:

当正式环境出现重大bug后需更新正式环境

发现重大缺陷,

在Hotfixes分支上解决bug,当解决完后需要将代码合并此时会出现两种情况

⑴.当项目处于整体发布时需要将Hotfixes合并至Release 分支上。

⑵.当项目不处于整体发布阶段将Hotfixes合并至Develop分支。

以上是固化的Git flow。但在实践中hotfixes较少使用,且随着代码的稳定,flow显得臃肿和难于理解。在随着项目团队的进一步缩小和代码的逐渐稳定,我们又将四分支flow修正为三分支flow,即develop,master,release。对Master上的修复采用直接提交并合并至release和develop的方式。如下图:

时间: 2024-08-03 18:09:15

GIT分支版本管理的相关文章

(转载)介绍一个成功的 Git 分支模型

介绍一个成功的 Git 分支模型 在这篇文章中,我提出一个开发模型.我已经将这个开发模型引入到我所有的项目里(无论在工作还是私人)已经一年有余,并且它被证明是非常成功的.我打算写这些已经很久了,但我一直找不到时间来做,现在终于有时间了.我不会讲任何项目的具体细节,仅是关于分支策略和释放管理相关内容. 它主要体现了Git对我们源代码版本的管理. 为何是Git? 对于Git与其他集中式代码管理工具相比的优缺点的全面讨论,请参见这里.这样的争论总是喋喋不休.作为一个开发者,与现今的其他开发工具相比较,

【转】一个成功的Git分支模型 .

---恢复内容开始--- 能力所限,本文的翻译多处都很不地道,如果哪些地方难于理解,还烦请查看原文.—— Dbzhang800 20110921 在本文中,我向大家介绍的是在大约一年前我为自己的项目(包括工作和私人项目)引入的且已被证实非常成功的一个开发模型(development model).这段时间我一直想写点关于它的东西,但在此之前,我却从未能抽出充足的时间来完成这件事.我不会谈论项目的任何细节,只涉及分支策略(branching strategy)和发布管理(release manag

git学习——<五>git分支

git学习——<一>git安装 git学习——<二>git配置文件 git学习——<三>git操作 git学习——<四>git版本管理 一.提出问题 今天开发的过程中遇到一个问题,A组接到开发任务要修改file文件,B组在此之前的15天为了完成自己的开发任务对file文件进行了修改,为了同步代码,B组将自己未完成的模块file文件提交到了cvs上.A对此一无所知,A组在完成开发任务后,把file文件完全上到了现网环境,报错了. 当然,避免上述问题的途径很多,

[转]Git分支管理策略

如果你严肃对待编程,就必定会使用"版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非Git莫属. 相比同类软件,Git有很多优点.其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便.有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称"快照")的指针,因此非常快捷易用. 但是,太方便了也会产生副作用.如果你不加注意,很可能

介绍一个成功的 Git 分支模型 Release 分支

英文原文: http://nvie.com/posts/a-successful-git-branching-model/ 中文版: 在这篇文章中,我提出一个开发模型.我已经将这个开发模型引入到我所有的项目里(无论在工作还是私人)已经一年有余,并且它被证明是非常成功的.我打算写这些已经很久了,但我一直找不到时间来做,现在终于有时间了.我不会讲任何项目的具体细节,仅是关于分支策略和释放管理相关内容. 它主要体现了Git对我们源代码版本的管理. 为何是Git? 对于Git与其他集中式代码管理工具相比

git项目版本管理

一个很小的HTML项目,使用.Git来记录和跟踪这个项目.包括以下内容: 创建版本库. 添加与修改文件. 创建新分支. 打标签并整理版本库. 克隆版本库. 创建版本库 Creating a Repository 在Git中,版本库(.git目录)是与工作目录树并排放在同一个目录中的. 本例中,要创建一个HTML页面,给这个项目取名为mysite. 首先创建一个同名目录“mysite”,并进入到这个目录,然后输入命令git init. prompt> mkdir mysite prompt> c

Git工程开发实践(四)——Git分支管理策略

Git工程开发实践(四)--Git分支管理策略 一.Git版本管理的挑战 Git是非常优秀的版本管理工具,但面对版本管理依然有非常大得挑战.工程开发中,开发者彼此的代码协作必然带来很多问题和挑战:A.如何开始一个Feature开发,而不影响其它Feature?B.由于很容易创建新分支,分支多了如何管理,时间久了,如何知道每个分支是干什么的?C.哪些分支已经合并回了主干?D.如何进行Release的管理?开始一个Release的时候如何冻结Feature, 如何在Prepare Release的时

一个 Git 分支协作模式的进化故事

从不用版本管理到使用 Git 分支管理的故事,也就是从这个时候开始的... 某公司只有一个程序员,一开始并没有版本管理的概念.项目开发只有一个人在参与,所以也没用版本管理工具. 后来,老板又招了两个程序员,老板说:“研发管理要规范!”,经过一番调研,选用了 Git,三个人开始使用 Git 进行开发上的协作. 一开始,三个人都是通过一个仓库,在 master 分支上进行协作.每天上班第一件事就是先把最新的代码从服务器上拉到本地的 master 分支,下班前再把代码给推到服务器上的 master 分

[廖雪峰] Git 分支管理策略

通常,合并分支时,如果可能,Git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制 禁用 Fast forward 模式,Git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息. 下面我们实战一下 --no-ff 方式的 git merge: 首先,仍然创建并切换 dev 分支: $ git checkout -b dev Switched to a new branch 'dev' 修改 readme.txt