`

基于git的源代码管理模型——git flow

 
阅读更多

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分支的命名可以使用除masterdeveloprelease-*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

  • 大小: 100.4 KB
  • 大小: 20 KB
  • 大小: 20 KB
  • 大小: 32 KB
分享到:
评论

相关推荐

    git flow在Windows中的安装

    `git flow` 是一种基于 Git 的分支管理模型,旨在为软件开发团队提供一套规范化的分支管理和工作流程策略。它通过定义一系列明确的分支类型及其用途来简化开发流程、合并流程以及发布流程,帮助团队更高效地协作。 ...

    gitflow使用指南

    GitFlow是一种广泛应用于软件开发团队中的分支管理策略,其主要目标是提供一个清晰、高效的工作流程来管理项目的源代码版本控制。GitFlow的核心思想在于区分两种类型的分支:长期存在的主分支(如`master`和`develop...

    基于vscode的git pull后代码冲突的两种解决方式

    在vscode上针对git可视化操作,在git pull后出现冲突的解决方式

    PyPI 官网下载 | salsita-gitflow-1.6.0.zip

    描述中提到的“资源来自pypi官网,资源全名:salsita-gitflow-1.6.0.zip”,确认了这个压缩文件的来源和名称,表示这是一个可以从PyPI获取的压缩文件,包含了`salsita-gitflow`库的源代码或者可执行文件。...

    源代码管理指引[参照].pdf

    为了完成任务,我将基于一般性的源代码管理知识,提供一篇详细的文章来满足您的要求。请注意,以下内容并非基于实际的PDF文件内容,因为您提供的文件信息并未包含实际的指引内容。 --- 源代码管理是软件开发中的一...

    Posh-GitFlow:用于执行 GitFlow 任务的 Powershell 脚本

    在下载的压缩包 `Posh-GitFlow-master` 中,通常包含源代码、文档、示例以及安装或运行 Posh-GitFlow 所需的其他资源。用户需要根据提供的文档说明安装和配置这个工具,以便在自己的开发环境中使用。了解 PowerShell...

    git团队共享代码

    Git是当今最流行的分布式版本控制系统,它被广泛用于软件开发中的代码管理,特别是在团队协作的项目中。"git团队共享代码"这个主题涉及到的核心概念包括Git的安装、基本操作、远程仓库的使用以及团队协作流程。 1. ...

    Python库 | gitflow_easyrelease-0.3.0-py2.py3-none-any.whl

    GitFlow是一种广受欢迎的Git分支管理策略,它将开发流程分为几个明确的阶段:开发、特性、发布、hotfix和master分支。`gitflow_easyrelease`库则为这个流程提供了一个方便的命令行接口,使得在Python项目中执行Git...

    tag-repo-action:基于Gitflow分支前缀的自动标记

    综上所述,“tag-repo-action”是一个基于Gitflow分支前缀的自动化标签管理工具,它使用JavaScript编写,适用于需要严格版本控制和协作的项目。通过自动化标签的创建和应用,它可以简化开发流程,提高效率,确保团队...

    Git 原理详解及实用指南.zip

    Git 是一个分布式版本控制系统,由Linux之父Linus Torvalds于2005年创建,主要用于管理软件源代码的变化。Git 的设计目标是速度、数据完整性以及支持非线性开发模式,允许开发者在不同的分支上同时进行工作。Git 的...

    TeamA-Gitflow-Workflow:git flow工作流程

    这个文件名可能表示的是Git Flow工作流程示例的仓库克隆或下载的zip文件,其中包含了TeamA按照Git Flow组织的全部源代码。解压后,可以查看项目的具体结构,了解他们如何在实际项目中应用Git Flow。 5. **最佳实践...

    应用系统双模研发的GIT分支模型介绍.docx

    Git flow是一种广泛应用的工作流模型,它设定了Master分支作为生产环境代码的唯一源,Develop分支作为日常开发的主要分支,以及Feature、Release和Hotfix三个临时分支,用于特性开发、版本发布和紧急修复。这种模型...

    小册-Git 原理详解及实用指南.zip

    Git 是一个分布式版本控制系统,由Linux之父Linus Torvalds于2005年创建,主要用于管理软件源代码的变更。本小册将深入探讨Git的基本原理,并提供实用的操作指南,帮助读者从新手到熟练掌握Git。 Git的核心概念包括...

    Git-2.20.1-64-bit(安装包).rar

    - Git可以与IDEs(如Visual Studio Code、IntelliJ IDEA)或源代码托管平台的Web界面无缝集成,提供图形化的操作界面。 总之,Git-2.20.1-64-bit是一个强大的版本控制系统,它提供了一整套工具来帮助开发者高效地...

    git-2.5.0.tar.gz

    2. **工作流改进**:Git 2.5.0 引入了`git flow`的改进,增强了对分支管理的支持,尤其是对于使用特性分支模型的开发团队,使得协作更为顺畅。 3. **更快的性能**:此版本优化了内部算法,提高了执行速度,尤其是在...

    git版本控制介绍

    Git由Linus Torvalds创建,最初是为了更好地管理Linux内核的源代码。与集中式版本控制系统相比,Git具有以下特点: - **完全分布**:每个开发者都有一个完整的代码库副本,这意味着无需每次都与中央服务器通信即可...

    progit.pdf

    **Git的历史** 可追溯到Linux内核的开发,Linus Torvalds为了更好地管理Linux内核的源代码,创建了Git。它的设计哲学强调性能、数据完整性和对非线性开发的支持。 ### Git基础 **Git的基本概念** 包括了工作目录、...

    2018尚硅谷Git和GitHub视频教程

    - Git是由Linus Torvalds于2005年发起的一个开源项目,最初是为了更有效地管理Linux内核源代码。 - Git的设计目标是速度、数据完整性以及支持分布式非线性工作流程。 - **Git的优势**: - 快速高效地处理从小型到...

    Git使用与操作.pptx

    公司自己再用的git操作流程,结合了gitfow流程进行改进,适合互联网开发团队git操作培训。新员工入职培训,都是使用该ppt进行培训,员工上手非常快。还有解决冲突的指引。

Global site tag (gtag.js) - Google Analytics