Git Flow介绍以及hubflow简单使用

Git Flow

Git Flow工作流通过为功能开发、发布准备和维护分配独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。

模型全貌

image.png

分支模型

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

主分支

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

  • master: master 分支为主分支不能直接push代码,也是新功能拉取的分支,分支有着每次功能上线的tag;在初始化git仓库的时候就会创建
  • develop: develop分支是保存当前最新开发成果的分支。通常这个分支上的代码也是可进行每日夜间发布的代码(Nightly build)

辅助分支

辅助分支是用于组织解决特定问题的各种软件开发活动的分支。辅助分支主要用于组织软件新功能的并行开发、简化新功能开发代码的跟踪、辅助完成版本发布工作以及对生产代码的缺陷进行紧急修复工作。这些分支与主分支不同,通常只会在有限的时间范围内存在。

  • feature: 开发人员新功能开发分支
  • hotfix: hotfix为线上代码的热更新,比如配置文件的修改或者极小的功能修改。
  • release:线上代码对应分支【不能直接push代码】
  • bugfix: 是对重大bug的修改,修改完成后,需要合并到qa分支进行测试,整个流程与develop 的流程一致

feature分支

feature分支(有时也可以被叫做“topic分支”)通常是在开发一项新的软件功能的时候使用,这个分支上的代码变更最终合并回develop分支或者干脆被抛弃掉(例如实验性且效果不好的代码变更)。

feature 分支以develop分支为起点,是开发者直接更改代码发送提交的分支。
  


image.png

开发流程:

  • 从develop分支创建feature分支
  • 从feature分支中实现目标功能
  • 通过Github 向develop发送pull request
  • 接受其他开发者审核后,将Pull Request合并至develop分支

使用规范:

  • feature分支的命名可以使用除master,develop,release-,hotfix-之外的任何名称

release分支

release分支是为发布新的产品版本而设计的。在这个分支上的代码允许做小的缺陷修正、准备发布版本所需的各项说明信息(版本号、发布时间、编译时间等等)。通过在release分支上进行这些工作可以让develop分支空闲出来以接受新的feature分支上的代码提交,进入新的软件开发迭代周期。

当develop分支上的代码已经包含了所有即将发布的版本中所计划包含的软件功能,并且已通过所有测试时,我们就可以考虑准备创建release分支了。而所有在当前即将发布的版本之外的业务需求一定要确保不能混到release分支之内(避免由此引入一些不可控的系统缺陷)。
  成功的派生了release分支,并被赋予版本号之后,develop分支就可以为“下一个版本”服务了。所谓的“下一个版本”是在当前即将发布的版本之后发布的版本。版本号的命名可以依据项目定义的版本号命名规则进行。

使用规范:

  • 可以从develop分支派生
  • 必须合并回develop分支和master分支
  • 分支命名惯例:release-*

hotfix分支

除了是计划外创建的以外,hotfix分支与release分支十分相似:都可以产生一个新的可供在生产环境部署的软件版本。
当生产环境中的软件遇到了异常情况或者发现了严重到必须立即修复的软件缺陷的时候,就需要从master分支上指定的TAG版本派生hotfix分支来组织代码的紧急修复工作。

这样做的显而易见的好处是不会打断正在进行的develop分支的开发工作,能够让团队中负责新功能开发的人与负责代码紧急修复的人并行的开展工作。

image.png

使用规范:

  • 可以从master分支派生
  • 必须合并回master分支和develop分支
  • 分支命名惯例:hotfix-*

HubFlow

HubFlow是适用于Git的GitFlow工具。它将您需要执行的大部分步骤转换为单行命令。

安装HubFlow

第一次安装HubFlow工具非常简单:

git clone https://github.com/datasift/gitflow
cd gitflow
sudo ./install.sh

HubFlow的使用

可以先使用 git hf help 查看基本命令

usage: git hf <subcommand>

Available subcommands are:
   init      Initialize a new git repo with support for the branching model.
   feature   Manage your feature branches.
   release   Manage your release branches.
   hotfix    Manage your hotfix branches.
   push      Push the changes from your current branch (plus any new tags) back upstream.
   pull      Pull upstream changes down into your master, develop, and current branches.
   update    Pull upstream changes down into your master and develop branches.
   version   Shows version information.

Try 'git hf <subcommand> help' for details.
  1. 先把远程代码线拉到本地
git clone git@gitlab.tenddata.com:hao.zhang/hubflow-demo.git
  1. 初始化项目:
git hf init
  1. 创建开发功能分支
git hf feature start newFeature
  1. 当feature分支创建后,进行代码开发。可以正常使用git命令
git commit -m '添加xxx功能模块'
git push
  1. 当feature功能完成后,关闭feature分支并且合并到develop分支
git hf feature finish newFeature

Fetching origin
warning: empty strings as pathspecs will be made invalid in upcoming releases. please use . instead if you meant to match all paths
To gitlab.tenddata.com:hao.zhang/hubflow-demo.git
 - [deleted]         feature/newFeature
Switched to branch 'develop'
Your branch is up-to-date with 'origin/develop'.
Deleted branch feature/newFeature (was a2c4df3).

Summary of actions:
- The latest changes from 'origin' were merged into 'master' and 'develop'
- The feature branch 'feature/newFeature' was merged into 'develop'
- Feature branch 'feature/newFeature' has been removed
- Feature branch 'origin/feature/newFeature' has been removed
- You are now on branch 'develop'
  1. 当所有的feature都完成后,准备发布新的产品版本可以开始release分支
git hf release start release-0.0.1
  1. 当 release-0.0.1 版本已经在继承测试环境测试完毕后,可以更新生产后。就可以关闭该分支并且推送到master分支
git hf release finish release-0.0.1

Fetching origin
Fetching origin
warning: empty strings as pathspecs will be made invalid in upcoming releases. please use . instead if you meant to match all paths
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
Deleted branch release/release-0.0.1 (was a2c4df3).
Everything up-to-date
Everything up-to-date
Counting objects: 1, done.
Writing objects: 100% (1/1), 183 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To gitlab.tenddata.com:hao.zhang/hubflow-demo.git
 * [new tag]         release-0.0.1 -> release-0.0.1
To gitlab.tenddata.com:hao.zhang/hubflow-demo.git
 - [deleted]         release/release-0.0.1

Summary of actions:
- Latest objects have been fetched from 'origin'
- Release branch has been merged into 'master'
- The release was tagged 'release-0.0.1'
- Tag 'release-0.0.1' has been back-merged into 'develop'
- Branch 'master' has been back-merged into 'develop'
- Release branch 'release/release-0.0.1' has been deleted
- 'develop', 'master' and tags have been pushed to 'origin'
- Release branch 'release/release-0.0.1' in 'origin' has been deleted.

以上是正常流程。
如果对某个分支命令不熟悉。可以使用
git hf xxx help 来进行查看帮助文档

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 什么是GitFlow? Git Flow定义了一个项目发布的分支模型,为管理具有预定发布周期的大型项目提供了一个健...
    一天大佬阅读 12,513评论 0 5
  • 1 Git Flow介绍 我们都知道, 在 git 的分支功能相对 svn 确实方便许多,而且也非常推荐使用分支来...
    七寸知架构阅读 7,819评论 20 68
  • Git 仓库申请流程 1. 开发主管向Git 管理员提交Git 仓库申请【邮件:发送给Git 管理员,抄送给项目经...
    骚包霸天虎阅读 2,068评论 0 0
  • 抬头相思低头泪 佳人何时归 镜花水月 美了世人眼 痛我一人心 如若你好 我愿化作佛前一粒芥子 终日为你...
    与寂寞为伍阅读 206评论 0 0
  • 风吹沙 蝶恋花 千古佳话 似水中月 情迷着镜中花 竹篱笆 木琵琶 拱桥月下 谁在弹唱 思念远方牵挂 那年仲夏 你背...
    笨小猫Jolin阅读 396评论 0 0