[译] 用 git-flow 来让 git workflow 自动化

[翻译文章] 原文链接
git-flow https://github.com/nvie/gitflow

Vincent Driessen的分支模型是一个 git 分支和发布管理规范,用来帮助开发人员在大型的软件项目中追踪features, hotfixes 和 releases.这个工作流有很多命令去输入和记住,所以还有一个 git 的子命令 git-flow 的库来做一部分的自动化流程,使得其更加方便使用.

git-flow

在安装 git-flow (brew install git-flow)之后,你就可以再你的工程中用init命令来使用 git-flow 了.你可以使用现有工程,但我们还是开启一个新的项目:

$ git flow init
Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
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? []

git-flow只是围绕现有git命令的一个包装,所以init命令不会更改你的项目中的任何内容,除了为你创建分支。 如果你不想使用git-flow,则无需更改或删除,你只需停止使用git-flow命令。
如果你设置好之后运行git branch, 你会发现你的主分支切换到了一个名为develop的新分支.

$ git branch
* develop
  master

develop分支还是大部分工作在处理的默认分支,然后master分支还是记录已经开发完成的代码.

Feature 分支

git-flow中的 feature 功能让多个并行开发的任务变得易于处理,要用这个功能,用 feature start加上你的新功能的名字.(下面例子中的: authentication)

$ git flow feature finish authentication
Switched to branch 'develop'
Updating 9060376..00bafe4
Fast-forward
 authentication.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 authentication.txt
Deleted branch feature/authentication (was 00bafe4).

Summary of actions:
- The feature branch 'feature/authentication' was merged into 'develop'
- Feature branch 'feature/authentication' has been removed
- You are now on branch 'develop'

你的feature 功能将会被合并,然后会回到develop分支.在内部, git-flow 使用了git merge --no-ff feature/authentication 来确保你的 feature分支在被移除前有任务未提交的内容.

Versioned releases

当你准备将新版本部署到生产的时候,如果你需要发布和打 tag, 可以使用git flow 的 release 功能.
跟 git-flow 的其他功能一样,你不想用 release 功能也可以.喜欢手动git merge --no-ff develop合并代码而且还没有 tag?没问题,但是,如果你正在使用版本化的 API 或者库的时候, release 功能可能非常有用,它的作用跟你希望的一样:

$ git flow release start 0.1.0
Switched to a new branch 'release/0.1.0'

Summary of actions:
- A new branch 'release/0.1.0' was created, based on 'develop'
- You are now on branch 'release/0.1.0'

Follow-up actions:
- Bump the version number now!
- Start committing last-minute fixes in preparing your release
- When done, run:
    
 git flow release finish '0.1.0'

输入版本号,并在 release 分支中执行发布项目所需的一切.我个人不愿意在 release 分支上做任何改动或者bug fix,但如果你做了, git-flow 也会保证你做的任何改动都会合并到masterdevelop分支.然后, 完成这次 release:

$ git flow release finish 0.1.0
Switched to branch 'master'
Merge made by the 'recursive' strategy.
 authentication.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 authentication.txt
Deleted branch release/0.1.0 (was 1b26f7c).

Summary of actions:
- Latest objects have been fetched from 'origin'
- Release branch has been merged into 'master'
- The release was tagged '0.1.0'
- Release branch has been back-merged into 'develop'
- Release branch 'release/0.1.0' has been deleted

Boom! git-flow 从远端拉取,把release合并到master,根据版本号打上 tag.而且在移除 release 分支之前,反向合并了 release 分支中的提交到develop分支.
在这个命令之后,你还是master分支,在你回到develop之前你可以部署这次发布,git-flow 的作用是为了把release的改动更新到master上.

Hotfix

当线上发生 bug 的时候,因为你的master分支与线上环境保持一致,所以你可以很快的发现线上环境的任何问题.
比如,生产环境发现有图片没有加载出来,你会回滚部署然后开启一个hotfix分支:

$ git flow hotfix start assets
Switched to a new branch 'hotfix/assets'

Summary of actions:
- A new branch 'hotfix/assets' was created, based on 'master'
- You are now on branch 'hotfix/assets'

Follow-up actions:
- Bump the version number now!
- Start committing your hot fixes
- When done, run:

     git flow hotfix finish 'assets'

hotfix分支和release分支大部分都是一样的,除了hotfix是基于masterrelease是基于develop.你可以很快的切换到hotfix分支然后开始修复问题,然后修改 minor 版本号.当你完成之后,输入hotfix finish:

$ git flow hotfix finish assets
Switched to branch 'master'
Merge made by the 'recursive' strategy.
 assets.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 assets.txt
Switched to branch 'develop'
Merge made by the 'recursive' strategy.
 assets.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 assets.txt
Deleted branch hotfix/assets (was 08edb94).

Summary of actions:
- Latest objects have been fetched from 'origin'
- Hotfix branch has been merged into 'master'
- The hotfix was tagged '0.1.1'
- Hotfix branch has been back-merged into 'develop'
- Hotfix branch 'hotfix/assets' has been deleted

跟完成一个release分支一样,hotfix分支会被合并到masterdevelop分支,在release分支打个 tag 之后hotfix分支会被移除.

你为什么不用git-flow?

如果你没有版本控制发布,这套 git 的工作流程和 git-flow 库可能不适合你.但是,如果你是有一个语义化的版本工程,就像 Rubygem 或者有版本API库,git-flow将为您提供几个简单的命令,这些命令将在底层做了进行大量工作,从而实现功能的开发,发布版本和修复bug更容易.

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

推荐阅读更多精彩内容

  • 1 Git Flow介绍 我们都知道, 在 git 的分支功能相对 svn 确实方便许多,而且也非常推荐使用分支来...
    七寸知架构阅读 7,819评论 20 68
  • Git FLow是什么 Git Flow是构建在Git之上的一个组织软件开发活动的模型,也是软件开发过程中一种成功...
    华枯荣阅读 2,240评论 2 10
  • 看完这部电影,有点压抑,感叹于他们最后的转变。 铁男在前面部分给我们一种血气方刚的感觉,虽然有点冲动,耐不住性子,...
    进击的Unicorn阅读 251评论 0 1
  • 每年都会在路上重读三毛的《撒哈拉沙漠》与《万水千山走遍》,一边品味自己在旅途中的酸甜苦辣,一边也在揣摩三毛当时的心...
    皮皮风火轮阅读 250评论 0 1