Git Flow 是什么
Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的工具。
2010年5月,在一篇名为“一种成功的Git分支模型”的博文中,@nvie介绍了一种在Git之上的软件开发模型。通过利用Git创建和管理分支的能力,为每个分支设定具有特定的含义名称,并将软件生命周期中的各类活动归并到不同的分支上。实现了软件开发过程不同操作的相互隔离。这种软件开发的活动模型被nwie称为“Git Flow”。
一般而言,软件开发模型有常见的瀑布模型、迭代开发模型、以及最近出现的敏捷开发模型等不同的模型。每种模型有各自应用场景。Git Flow重点解决的是由于源代码在开发过程中的各种冲突导致开发活动混乱的问题。因此,Git flow可以很好的于各种现有开发模型相结合使用。
在开始研究Git Flow的具体内容前,下面这张图可以看到模型的全貌(引自nvie的博文):
Git Flow中的分支
Git Flow模型中定义了主分支和辅助分支两类分支。其中主分支用于组织与软件开发、部署相关的活动;辅助分支组织为了解决特定的问题而进行的各种开发活动。
主分支
主分支是所有开发活动的核心分支。所有的开发活动产生的输出物最终都会反映到主分支的代码中。主分支分为master分支和development分支。
master分支
master分支上存放的应该是随时可供在生产环境中部署的代码(Production Ready state)。当开发活动告一段落,产生了一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,最好添加对应的版本号标签(TAG)。
develop分支
develop分支是保存当前最新开发成果的分支。通常这个分支上的代码也是可进行每日夜间发布的代码(Nightly build)。因此这个分支有时也可以被称作“integration branch”。
当develop分支上的代码已实现了软件需求说明书中所有的功能,通过了所有的测试后,并且代码已经足够稳定时,就可以将所有的开发成果合并回master分支了。对于master分支上的新提交的代码建议都打上一个新的版本号标签(TAG),供后续代码跟踪使用。
因此,每次将develop分支上的代码合并回master分支时,我们都可以认为一个新的可供在生产环境中部署的版本就产生了。通常而言,“仅在发布新的可供部署的代码时才更新master分支上的代码”是推荐所有人都遵守的行为准则。基于此,理论上说,每当有代码提交到master分支时,我们可以使用Git Hook触发软件自动测试以及生产环境代码的自动更新工作。这些自动化操作将有利于减少新代码发布之后的一些事务性工作。
辅助分支
辅助分支是用于组织解决特定问题的各种软件开发活动的分支。辅助分支主要用于组织软件新功能的并行开发、简化新功能开发代码的跟踪、辅助完成版本发布工作以及对生产代码的缺陷进行紧急修复工作。这些分支与主分支不同,通常只会在有限的时间范围内存在。
辅助分支包括:
- 用于开发新功能时所使用的feature分支;
- 用于辅助版本发布的release分支;
- 用于修正生产代码中的缺陷的hotfix分支。
以上这些分支都有固定的使用目的和分支操作限制。从单纯技术的角度说,这些分支与Git其他分支并没有什么区别,但通过命名,我们定义了使用这些分支的方法。
feature分支
使用规范:
- 可以从develop分支发起feature分支
- 代码必须合并回develop分支
- feature分支的命名可以使用除
master
,develop
,release-*
,hotfix-*
之外的任何名称
feature分支(有时也可以被叫做“topic分支”)通常是在开发一项新的软件功能的时候使用,这个分支上的代码变更最终合并回develop分支或者干脆被抛弃掉(例如实验性且效果不好的代码变更)。
一般而言,feature分支代码可以保存在开发者自己的代码库中而不强制提交到主代码库里。
release分支
使用规范:
- 可以从develop分支派生
- 必须合并回develop分支和master分支
- 分支命名惯例:
release-*
release分支是为发布新的产品版本而设计的。在这个分支上的代码允许做小的缺陷修正、准备发布版本所需的各项说明信息(版本号、发布时间、编译时间等等)。通过在release分支上进行这些工作可以让develop分支空闲出来以接受新的feature分支上的代码提交,进入新的软件开发迭代周期。
当develop分支上的代码已经包含了所有即将发布的版本中所计划包含的软件功能,并且已通过所有测试时,我们就可以考虑准备创建release分支了。而所有在当前即将发布的版本之外的业务需求一定要确保不能混到release分支之内(避免由此引入一些不可控的系统缺陷)。
成功的派生了release分支,并被赋予版本号之后,develop分支就可以为“下一个版本”服务了。所谓的“下一个版本”是在当前即将发布的版本之后发布的版本。版本号的命名可以依据项目定义的版本号命名规则进行。
hotfix分支
使用规范:
- 可以从master分支派生
- 必须合并回master分支和develop分支
- 分支命名惯例:
hotfix-*
除了是计划外创建的以外,hotfix分支与release分支十分相似:都可以产生一个新的可供在生产环境部署的软件版本。
当生产环境中的软件遇到了异常情况或者发现了严重到必须立即修复的软件缺陷的时候,就需要从master分支上指定的TAG版本派生hotfix分支来组织代码的紧急修复工作。
这样做的显而易见的好处是不会打断正在进行的develop分支的开发工作,能够让团队中负责新功能开发的人与负责代码紧急修复的人并行的开展工作。
更进一步
Git Flow开发模型从源代码管理角度对通常意义上的软件开发活动进行了约束。应该说,为我们的软件开发提供了一个可供参考的管理模型。Git Flow开发模型让nvie的开发代码仓库保持整洁,让小组各个成员之间的开发相互隔离,能够有效避免处于开发状态中的代码相互影响而导致的效率低下和混乱。
所谓模型,在不同的开发团队,不同的文化,不同的项目背景情况下都有可能需要进行适当的裁剪或扩充。祝各位好运!
PS:为了简化使用Git Flow模型时Git指令的复杂性,nvie开发出了一套git增强指令集。可以运行于Windows、Linux、Unix和Mac操作系统之下。有兴趣的同学可以去看看。
附录
安装Git Flow
Git Flow的在不同的操作系统之下有一些轻微的不同。好在nvie给出了详细的指导。
Windows
配合Cygwin使用。Cygwin之下的安装非常简单。执行如下指令即可:
wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
使用这条命令在大多数情况下都可以完成Git Flow的安装。但在少数情况下也会遇到异常:
-
执行 git flow init 命令后出现错误:"flags: FATAL unable to determine getopt version"
需要使用Cygwin的Util-linux安装包。重新使用cywgin的setup安装吧。
-
如果出现类似"$'\r': command not found"的错误,则可能是换行符出现了问题。可以使用sed命令来快速解决。
$ sed -i 's/\n\r/\n/mg' /usr/local/bin/git-flow*
$ sed -i 's/\n\r/\n/mg' /usr/local/bin/gitflow-*
引用自: http://www.ituring.com.cn/article/56870
相关推荐
公司自己再用的git操作流程,结合了gitfow流程进行改进,适合互联网开发团队git操作培训。新员工入职培训,都是使用该ppt进行培训,员工上手非常快。还有解决冲突的指引。
核心PCL:包含所有ViewModel和UI逻辑代码的可移植类库。 核心项目命名:.Core。 包含App.cs:负责注册所需的任何类型和服务。 定义首次启动应用程序时要显示的ViewModel。 iOS项目:本机Xamarin iOS项目,其中...
和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:你为什么要关心? 第 2 章:通过行为参数化传递代码 第 3 章:Lambda ...
刚接触编码的学生发现很难管理自己的源代码。 提供这些服务的系统可能会花费大量时间来理解英语命令,复杂系统的流程... [ 问题 ] 缺少面向中小学生的源代码版本管理服务 难以学习现有的源代码版本管理服务ex。 ...
首先, Spring Cloud Data Flow UI使用 (基于 )来管理依赖关系和构建的执行。 为了提供更轻松的持续集成(CI)支持,还可以使用执行构建。 Spring Cloud Data Flow仪表板使用 ,特别是 ,它将实际在下面执行 。 ...
Apress源代码 该存储库随附 Colin Yates,Seth Ladd,Marten Deinum,Erwin Vervaet,Koen Serneels和Christophe Vanfleteren的 (Apress,2012年)。 使用绿色按钮将文件下载为zip格式,或使用Git将存储库克隆到您...
git,github 英文的Github和git命令,初学者难以理解的git flow••[实施目标] :check_mark: 中小学生源代码版本管理服务开发 :check_mark: 易于理解的版本控制流程和韩语界面 :right_arrow: 为入门(块编码)用户...
:check_mark_button: 您可以使用gitflow或类似的分支策略,在源代码控制(生产,质量检查等)中跟踪您的ORG。 :check_mark_button: 您想要仅部署增量更改的配置项或发布过程 :package: 安装 运行sfdx plugins:...
GDGKisiiApp GDG Kisii Android移动应用程序的主存储库。 我们创建了一个android应用程序来管理我们的开发人员社区。... 流行的方法包括:Gitflow工作流程,集中式工作流程,Forking工作流程等。 -持续集成
源代码控制节点 - 服务器 NPM - 后端包管理器 Bower - 前端包管理器入门安装 git 并添加到路径变量确保节点正在运行 git --version 将 git repo 克隆到本地目录 git clone 我们正在使用 git-flow 工作流程。...
matlab的egde源代码IBL Python库 描述 该库用于实施国际脑实验室数据管道。 目前正在积极开发中。 该库目前为4个主要模块: Brainbox :面向神经科学分析的库 ibllib :通用库,包含I / O,信号处理和IBL数据管道...
Apress源代码 该存储库随附了Colin Yates,Seth Ladd,Steven Devijver和Darren Davison的 (Apress,2006年)。 使用绿色按钮将文件下载为zip格式,或使用Git将存储库克隆到您的计算机上。 发行版 版本v1.0对应于...
基于测试的开放源代码学习平台。 目录 特征 学习编码并解决各种基于测试的挑战 作为代码学习经验的一部分,积极练习git flow和自动代码测试 现场管理学生的作业,提交的内容和进度。 为您的学生和世界建立并分享您...
使用代码库Lombok该项目使用以下lombok功能: github流程该项目正在使用github flow: : 源代码样式xio源代码符合提出的标准。 以下maven插件维护源代码标准: 是一个预提交的git钩子,用于格式化将要提交的所有Java...
源代码 最新和最好的来源可以在这里找到。 如果您使用的是 Git,请使用此命令克隆项目: git clone git://github.com/flow/nbt.git 或者下载最新的或者最新的。 测试依赖 仅当您编译此项目中包含的测试时才需要以下...
来自LUCAS的ASP.NET CORE 3.1的项目时间表 关于项目的链接 ...病害3-创建解决方案和源代码存储库 楷模 意见 控制器 设置 根 程序 启动 依存关系 特性 病害4-创建解决方案结构 git flow master->开发-> featur
用户可以下载源代码的zip或者安装并使用以下命令检出代码2.使用git命令检出代码git clone cd aog_city_name_maker git checkout主源文件详细信息agent.json-对话流代理文件package.json-代理版本文件“实体”目录-...
flow.ci是一款开放源代码CI / CD自动化服务器,旨在降低复杂性并增加用户体验。 它通过动态代理支持高可用性,多个构建环境以及可伸缩性。 高可用性flow.ci设计为在公共,私有或混合云中运行,可以与多个实例一起...
Android Github存储库简单项目 ... 它主要用于开发中的源代码管理。 它是免费的开放源代码,并且可以快速高效地处理从小型到大型项目的所有内容。 因此,这个想法是要有两个主要分支,分别称为Master和De
git clone https://github.com/KinveyApps/mic-password-flow-sample.git 检出源后,您需要用适当的设置替换短语SET_TO_YOUR_APP_VALUE所有实例。 kinveyAppId -- 在您的应用程序的仪表板上的 Kinvey 控制台中找到...