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

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

一、Git版本管理的挑战

Git是非常优秀的版本管理工具,但面对版本管理依然有非常大得挑战。工程开发中,开发者彼此的代码协作必然带来很多问题和挑战:
A、如何开始一个Feature开发,而不影响其它Feature?
B、由于很容易创建新分支,分支多了如何管理,时间久了,如何知道每个分支是干什么的?
C、哪些分支已经合并回了主干?
D、如何进行Release的管理?开始一个Release的时候如何冻结Feature, 如何在Prepare Release的时候,开发人员可以继续开发新的功能?
E、生产线上代码出现Bug,如何快速修复?而且修复的代码要包含到开发人员的分支以及下一个Release?
大部分开发人员使用Git一般使用三个甚至两个分支,一个是Master,一个是Develop,还有一个基于Develop的各种分支。在项目规模小的时候勉强可以支撑,但如果开发人员较多,而且项目周期过长就会出现各种问题。
在Git进行源码管理实践中,诞生了Git Flow,用于进行Git分支管理。

二、主流分支策略简介

Git主流分支策略有三种:Git Flow、GitHub Flow、TBD。
Git Flow是应用最广的Git分支管理实践。
GitHub Flow主要应用于GitHub代码托管工具中。
https://guides.github.com/introduction/flow/
Trunk based development
TBD(Trunk-based development),是单主干的分支实践,在SVN 中比较流行。
https://trunkbaseddevelopment.com/alternative-branching-models/
每个开发团队都应该根据团队自身和项目的特点来选择最适合的分支实践。首先是项目的版本发布周期。如果发布周期较长,则Git-Flow是最好的选择。Git-Flow可以很好地解决新功能开发、版本发布、生产系统维护等问题;如果发布周期较短,则TBD和GitHub Flow都是不错的选择。GitHub Flow的特色在于集成了Pull Request和代码审查。如果项目已经使用GitHub,则GitHub Flow是最佳的选择。GitHub Flow和TBD对持续集成和自动化测试等基础设施有比较高的要求。

三、Git Flow简介

Git Flow是构建在Git上的一个组织软件开发活动的源码管理的模型,是一套使用Git进行源代码管理时的行为规范和简化部分Git操作的工具,是在Git上构建的一项源码管理最佳实践。
Git Flow通过利用Git创建和管理分支的能力,为每个分支设定具有特定的含义名称,并将软件生命周期中的各类活动归并到不同的分支上,实现了软件开发过程不同操作的相互隔离。
软件开发模型常见的有瀑布模型、迭×××发模型、敏捷开发模型等不同的模型,每种模型有各自应用场景。Git Flow重点解决的是由于源代码在开发过程中的各种冲突导致开发活动混乱的问题。因此,Git flow可以很好的与各种现有开发模型结合使用。
Git Flow分支模型资料如下:
https://nvie.com/posts/a-successful-git-branching-model/

四、Git Flow模型简介

1、Git Flow模型简介

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


Git Flow模型中定义了主分支和辅助分支两类分支,其中主分支用于组织与软件开发、部署相关的活动;辅助分支组织用于解决特定的问题而进行的各种开发活动。

2、主分支

主分支是所有开发活动的核心分支。所有的开发活动产生的输出物最终都会反映到主分支的代码中。主分支分为master分支和develop分支。

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


A、master分支
通常,master分支只能从其它分支合并,不能在master分支直接修改。master分支上存放的是随时可供在生产环境中部署的代码(Production Ready state)。当开发活动到一定阶段,产生一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,最好添加对应的版本号标签(TAG)。
所有在Master分支上的Commit应该打Tag。
B、develop分支
a、develop分支是保持当前开发最新成果的分支,一般会在此分支上进行晚间构建(Nightly Build)并执行自动化测试。
b、develop分支产生于master分支, 并长期存在。
c、当一个版本功能开发完毕且通过测试功能稳定时,就会合并到master分支上,并打好带有相应版本号的tag。
d、develop分支一般命名为develop
develop分支是主开发分支,包含所有要发布到下一个Release的代码,主要合并其它分支,比如Feature分支。

3、辅助分支

辅助分支是用于组织解决特定问题的各种软件开发活动的分支。辅助分支主要用于组织软件新功能的并行开发、简化新功能开发代码的跟踪、辅助完成版本发布工作以及对生产代码的缺陷进行紧急修复工作。辅助分支通常只会在有限的时间范围内存在。
辅助分支包括用于开发新功能时所使用的feature分支,用于辅助版本发布的release分支,用于修正生产代码中的缺陷的hotfix分支。
辅助分支都有固定的使用目的和分支操作限制。通过对分支的命名,定义了使用辅助分支的方法。
A、feature分支
feature分支使用规范:
a、可以从develop分支发起feature分支。
b、代码必须合并回develop分支。
c、feature分支的命名可以使用除master,develop,release-*hotfix-*之外的任何名称。
feature分支(topic分支)通常在开发一项新的软件功能的时候使用,分支上的代码变更最终合并回develop分支或者干脆被抛弃掉(例如实验性且效果不好的代码变更)。
一般而言,feature分支代码可以保存在开发者自己的代码库中而不强制提交到主代码库里。
Feature分支开发完成后,必须合并回Develop分支,合并完分支后一般会删Feature分支,但也可以保留。

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


B、release分支
release分支使用规范:
a、可以从develop分支派生;
b、必须合并回develop分支和master分支;
c、分支命名惯例:release-*
release分支是为发布新的产品版本而设计的。在release分支上的代码允许做测试、bug修改、准备发布版本所需的各项说明信息(版本号、发布时间、编译时间等)。通过在release分支上进行发布相关工作可以让develop分支空闲出来以接受新的feature分支上的代码提交,进入新的软件开发迭代周期。
当develop分支上的代码已经包含了所有即将发布的版本中所计划包含的软件功能,并且已通过所有测试时,可以考虑准备创建release分支。而所有在当前即将发布的版本外的业务需求一定要确保不能混到release分支内(避免由此引入一些不可控的系统缺陷)。
成功的派生release分支并被赋予版本号后,develop分支就可以为下一个版本服务。版本号的命名可以依据项目定义的版本号命名规则进行。
发布Release分支时,合并Release到Master和Develop, 同时在Master分支上打个Tag记住Release版本号,然后就可以删除Release分支。

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


C、hotfix分支
hotfix分支使用规范:
a、可以从master分支派生;
b、必须合并回master分支和develop分支;
c、分支命名惯例:hotfix-*
hotfix分支是计划外创建的,可以产生一个新的可供在生产环境部署的软件版本。
当生产环境中的软件遇到异常情况或者发现了严重到必须立即修复的软件缺陷时,就需要从master分支上指定的TAG版本派生hotfix分支来组织代码的紧急修复工作。优点是不会打断正在进行的develop分支的开发工作,能够让团队中负责新功能开发的人与负责代码紧急修复的人并行的开展工作。
hotfix分支基于Master分支创建,开发完后需要合并回Master和Develop分支,同时在Master上打一个tag。

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

五、Git Flow工程实践的意义

Git Flow开发模型从源代码管理角度对通常意义上的软件开发活动进行了约束,为软件开发提供了一个可供参考的管理模型。Git Flow开发模型让代码仓库保持整洁,让小组各个成员之间的开发相互隔离,能够有效避免处于开发状态中的代码相互影响而导致的效率低下和混乱。
为了简化使用Git Flow模型时Git指令的复杂性,nvie开发出了一套git增强指令集,可以运行于Windows、Linux、Unix和Mac操作系统下。
https://github.com/nvie/gitflow
Git Flow工具是一套工具命令集,是对Git命令的封装,其命令如下:

git flow init 
git flow feature start xxx 
git flow feature finish xxx 
git flow release start 0.1.xx 
git flow release finish 0.1.xx 
git flow hotfix start xxx 
git flow hotfix finish xxx

使用Git Flow工具只需要两个命令即可完成Git Flow分支管理。如果使用Git命令,对开发者来说足够繁琐。

六、Git Flow分支管理应用示例

1、创建develop分支

git branch develop
git push -u origin develop

2、开始新Feature开发

git checkout -b some-feature develop
# Optionally, push branch to origin:
git push -u origin some-feature       
git status
git add some-file
git commit 

3、完成Feature

git pull origin develop
git checkout develop
git merge --no-ff some-feature
git push origin develop
git branch -d some-feature
git push origin --delete some-feature

4、开始Release

git checkout -b release-0.1.0 develop
# Optional: Bump version number, commit
# Prepare release, commit  

5、完成Release

git checkout master
git merge --no-ff release-0.1.0
git push
git checkout develop
git merge --no-ff release-0.1.0
git push
git branch -d release-0.1.0
# If you pushed branch to origin:
git push origin --delete release-0.1.0   
git tag -a v0.1.0 master
git push --tags

6、开始Hotfix

git checkout -b hotfix-0.1.1 master

7、完成Hotfix

git checkout master
git merge --no-ff hotfix-0.1.1
git push
git checkout develop
git merge --no-ff hotfix-0.1.1
git push
git branch -d hotfix-0.1.1
git tag -a v0.1.1 master
git push --tags

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Git安装和使用 Git安装和使用 刚开始用git的小白适用,,转自http://www.cnblogs.com/qijunjun/p/7137207.html 实际项目开发中,我们经常会用一些版本控制器来托管自己的代码,今天就来总结下Git的相关用法,废话不多说,直接开写。 目的:通过Git管理g
fatal: remote origin already exists.解决方法 第一个问题git remote add origin**************fatal: remote origin already exists.(报错远程起源已经存在。)上网查了下,有很多小白遇到过这个问题,以
git常用命令(二)查看历史记录 git log [--pretty=oneline] [ --oneline] / reflog Eniac-W 于 2020-10-18 18:12:38 发布 2368 收藏 3分类专栏: git 文章标签: git版权 git专栏收录该内容10 篇文章0 订阅
git之如何把本地文件上传到远程仓库的指定位置 git专栏收录该内容2 篇文章0 订阅订阅专栏2018.11.26添加内容: 对于自己的仓库,我们建议将远程仓库通过clone命令把整个仓库克隆到本地的某一路径下。这样的话我们从本地向远程仓库提交代码时,就可以直接把需要提交的文件拖到我们之前克隆下来的
代码规范之 lint-staged 在代码提交之前,进行代码规则检查能够确保进入git库的代码都是符合代码规则的。但是整个项目上运行lint速度会很慢,lint-staged能够让lint只检测暂存区的文件,所以速度很快。 安装与配置 安装husky和lint-staged: yarn add hu
方法:1、文件没有git操作时用“git checkout--文件”命令还原;2、文件提交到暂存区时用“git reset HEAD”命令回退当前版本还原;3、文件提交到仓库区时用“git reset HEAD^”命令回退上一个版本还原。 本文操作环境:Windows10系统、Git2.30.0版、
使用Git将本地文件提交到远程仓库 一 操作准备条件: git远程仓库已经建好了,本地文件已经存在了,现在要将本地代码推到git远程仓库保存。 解决办法如下: 1、(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2、把文件添加到版本库中,使用命令
GitHub克隆代码到本地全教程 因为工作原因更换电脑,想要从GitHub上拉取代码的话需要重新配置ssh keys,时间过的久了怕忘记就把步骤给记录下来。 具体步骤: 1.安装git 这我就不说了 2.在TortoiseGit的安装文件中找到 puttygen.exe应用程序 ,默认应该都是 :C
github上传项目的时候报出git@github.com: Permission denied (publickey). fatal: Could not read from remote repo 前言 会不会有程序员小伙伴在刚开始使用github的时候上传项目的时候困难重重,但是又基于自己本身
查看历史 git log --pretty=onelinegit log (然后一直按enter键) 一个是切换根据历史里面的id切换git checkout ID git log 需要不断按enter键出来历史提交记录 git log --pretty=oneline 是直接出来历史记录
Git工作原理及常用命令 欧怼怼发布于 2020-12-08 git介绍 git(读音/ɡɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 git
git git提交项目的具体流程 git项目流程:以下主要有3个角色:负责人、成员A、成员B(若负责人也要修改代码,则负责人同时兼任2个角色:负责人、成员) 主要负责人:搭建项目架构且提交到git上1.github官网登录后,新建仓库,生成地址url,复制线上仓库.git结尾的地址url2.在一个空
git上传项目全部流程 一、下载git 进入网址:https://git-scm.com/downloads; 点击中的Download 2.16.0 for Windows; 在中选择蓝色字段点击,根据电脑64或32位选择适合的下载,点击即可进行下载,下载完成后傻瓜式安装,一直点击下一步即可完成安
Your local changes to the following files would be overwritten by checkout问题的解决 于 2018-07-17 11:38:27 发布 Git 的本地版本管理有三个部分 名称	说明工作区(Working Directory)	
Git配置SSH Keys步骤使用教程 1.若是首次安装使用git,先配置用户名称和邮箱(如果有就不需要配置) 打开Git Bash,输入 git config --global user.name "姓名"git config --global user.email &quot
基本配置完成,接下来就是上传你要上传的项目了。 1、初始化git 进入你要上传的项目的文件夹,在文件夹内鼠标右击,选择“Git Bash Here”打开git命令行,输入: $ git init 目的是初始化git,并且会创建个“.git”文件夹,里面有个“config”就是用来保存远程厂库路径地址
本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“gitee如何上传代码”吧! ...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作中,相信很多人在gitee如何下载仓库里的项目问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Gitee上更新代...