gitflow分支管理模型

简介: gitflow分支管理模型

gitflow的分支类型:



  • master分支(1个)
  • develop分支(1个)
  • feature分支。同时存在多个。
  • release分支。同一时间只有1个,生命周期很短,只是为了发布。
  • hotfix分支。同一时间只有1个。生命周期较短,用了修复bug或小粒度修改发布。


在这个模型中,master和develop都具有象征意义。master分支上的代码总是稳定的(stable build),随时可以发布出去。develop上的代码总是从feature上合并过来的,可以进行Nightly Builds,但不直接在develop上进行开发。当develop上的feature足够多以至于可以进行新版本的发布时,可以创建release分支。


release分支基于develop,进行很简单的修改后就被合并到master,并打上tag,表示可以发布了。紧接着release将被合并到develop;此时develop可能往前跑了一段,出现合并冲突,需要手工解决冲突后再次合并。这步完成后就删除release分支。


当从已发布版本中发现bug要修复时,就应用到hotfix分支了。hotfix基于master分支,完成bug修复或紧急修改后,要merge回master,打上一个新的tag,并merge回develop,删除hotfix分支。


由此可见release和hotfix的生命周期都较短,master/develop虽然总是存在但却不常使用。


以上就是gitflow的基本概念了。下面是nvie(gitflow的提出者,一个荷兰人!) A successful Git branching model(发布于2010年月5日)一文的笔记。


aHR0cDovL3d3dy5iZXJsaW5peC5jb20vaW1hZ2VzL2dpdGZsb3ctbGF5b3V0LnBuZw.png


从右看起:


  • 时间轴。
  • feature(玫红)。主要是自己玩了,差不多的时候要合并回develop去。从不与master交互。
  • develop(黄色)。主要是和feature以及release交互。
  • release(绿色)。总是基于develop,最后又合并回develop。当然对应的tag跑到master这边去了。
  • hotfix(红色)。总是基于master,并最后合并到master和develop。
  • master(蓝色)。没有什么东西,仅是一些关联的tag,因从不在master上开发。


接下来nvie说道自己喜爱git,因git改变了人们对合并/分支(merge/branches)的看法。从集中式的代码管理工具过来的人感到释放了(beware of merge conflicts, they bite you,注意合并冲突,它们会跳出来咬你!)。


gitflow实例



安装gitflow:


$ git clone --recursive git://github.com/nvie/gitflow.git
$ cd gitflow/
$ sudo make install
$ ls /usr/local/bin/git-flow
/usr/local/bin/git-flow


到项目根目录下执行gitflow,因为之前修改没有commit,所以gitflow初始化失败:


$ git flow init
fatal: Working tree contains unstaged changes. Aborting.


commit后再次进行gitflow初始化:

$ git commit -a -m "update Bash"
[master 8f5b874] update Bash
 4 files changed, 71 insertions(+), 5 deletions(-)
[bailing@zhuji zhuji]$ git flow init
Which branch should be used for bringing forth production releases?
   - master
Branch name for production releases: [master] 
Branch name for "next release" development: [develop] 
How to name your supporting branch prefixes?
Feature branches? [feature/] 
Release branches? [release/] 
Hotfix branches? [hotfix/] 
Support branches? [support/] 
Version tag prefix? []


一路回车下来,各个分支名都按默认的设置。最后,当前分支已经被切换到了develop:


$ git branch
* develop
  master


建立一个新的feature。git flow新建了功能分支feature/blog_builder,并在develop的基础上checkout了新分支:


$ git flow feature start blog_builder
$ git branch
  develop
* feature/blog_builder
  master


开发完成后执行如下命令:



正如这条命令的总结所言,git flow为我们做了3件事:


把feature/blog_builder合并到了develop。

删除了feature/blog_builder分支。

切换回develop分支。

接下来发布一个正常的版本:


$ git flow release start v0.5


一旦需要发布的版本确认无误可以发布后,执行命令:


$ git flow release finish v0.5
summary of actions:
- Latest objects have been fetched from 'origin'
- Release branch has been merged into 'master'
- The release was tagged 'v0.5'
- Release branch has been back-merged into 'develop'
- Release branch 'release/v0.5' has been deleted


注意release/v0.5被合并到了master和develop分支,并打了个v0.5的tag,然后被删除,最后切换回了develop分支:


$ git branch
* develop
  master


发布时只需将tag为v0.5的版本checkout出来部署即可:


$ git tag
v0.5


当上线后发现v0.5的bug,可以进行hotfix:


$ git flow hotfix start v0.5.1


此时gitflow从master分支上拉出一个hotfix/v0.5.1的分支,接下来在新分支上修改bug。最后执行命令:


$ git flow hotfix finish v0.5.1


这样hotfix/v0.5.1被merge到master/develop分支,打好v0.5.1这个tag,删除这个分支,切换回develop分支。


之后又是新一次的轮回,启动正常的feature开发。


目录
相关文章
|
9月前
|
开发工具 git 开发者
Git常用命令大全:让你轻松驾驭版本控制
Git命令速查:`git init`新建仓库,`git clone`克隆,`git add`入暂存区,`git commit -m`提交,`git status`查看状态,`git log`查看历史,`git branch`创建分支,`git checkout`切换,`git merge`合并,`git pull`拉取更新,`git push`推送,`git remote -v`查看远程,`git checkout --`撤销本地修改,`git reset HEAD`取消暂存,`git reset --hard`回退版本。掌握这些,提升代码管理效率!
|
存储 安全 网络安全
Git教程5(bug分支和多人协作及标签管理)
在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。 比如我在开发中接到一个404 bug时候,我们可以创建一个404分支来修复它,但是,当前的dev分支上的工作还没有提交。比如如下:
Git教程5(bug分支和多人协作及标签管理)
|
3月前
|
前端开发 项目管理
Gitflow分支策略及其在前端工程化中的应用
Gitflow 分支策略也并非适用于所有项目。对于一些小型或简单的前端项目,可能会显得过于复杂。在实际应用中,需要根据项目的具体情况和团队的需求进行适当调整和优化。
110 55
|
2月前
GitFlow流程
分支角色概述:主分支(master/main)代表最新稳定版本,开发分支(develop)用于日常开发,特性分支(feature)用于开发新功能,发布分支(release)用于准备新版本发布,热修复分支(hotfix)用于紧急修复已发布版本的问题。GitFlow流程包括初始化、开发新功能、准备发布、热修复和持续迭代。
137 17
|
2月前
|
运维 测试技术 持续交付
代码管理的艺术:你的团队是否还在为 Git 分支管理头疼?
本文回顾了作者从2~3人初创团队到百人技术团队的经历,分享了代码管理工具从无到SVN再到Git的演变。重点介绍了Git Flow和GitHub Flow两种常用的Git分支管理模型,分析了它们的适用场景和优缺点。Git Flow适合中大型项目,而GitHub Flow则更适合小型团队和Web应用开发。
105 0
|
6月前
|
jenkins 测试技术 开发工具
协同开发的艺术:Git 在团队项目中的高效应用
【8月更文第16天】在现代软件开发中,团队成员之间的高效协作是至关重要的。Git 作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码的变化和协作。本文将介绍如何利用 Git 来优化团队的工作流程,并提供实际操作的代码示例。
217 1
|
6月前
|
开发工具 git
Git使用经验总结1
Git使用经验总结1
26 0
|
运维 前端开发 jenkins
企业中多分支多人协作的git工作流程
企业中多分支多人协作的git工作流程
466 0
企业中多分支多人协作的git工作流程
|
jenkins 持续交付 开发工具
Git分支管理规范构思
最近对于公司项目源码分支管理有一些规范构思,对于同一个项目而言,`不同环境`的源码管理、`自动化部署`方式、以及`接口数据隔离`等我们是否可以满足现状?
Git分支管理规范构思
|
程序员 开发工具 数据安全/隐私保护
版本管理·玩转git(团队合作)
版本管理·玩转git(团队合作)
90 0
版本管理·玩转git(团队合作)

热门文章

最新文章