原文链接:http://www.jeffkit.info/2010/12/860/#comment-316
hg flow(这是神马?)用了很长一段时间了,是该积累些东东的时刻了。这里说说git-flow:
这是一篇译文(原文在此),当时我从这篇文章开始初识git-flow,经过一段时间的实践后,觉得git-flow非常棒,我决定在团队里面推行,我需要写一篇使用的教程,重新读这篇文章的时候,我认为,我只需要把它翻译成中文版,就是给队员们很好的教程了。遂。。拙译如下,个别地方可能不太靠原文,请看官明了:
今年的一月, @nvie 同学发表了博客 “一种有效的Git分支模型”, 文章讲解了他是如何让自己的Git仓库保持整洁,除此之外,他发布了git-flow; 一个可以轻松实现该模型的Git扩展。
有同学说从来没有听说过?对此,哥表示相当震精,所以,在这篇文章里我要告诉你,为什么它可以让你从早上傻笑到晚上。
安装完git-flow后,你可以在当前目录下创建一个全新的仓库或把一个现有的仓库转换成新的分支结构:
$ git flow init
它会问你一系列的问题,蛋定!尽量使用它的默认值就好了:
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会自动地把develop(或随便你重命名它为神马)分支设置为默认分支,此后,你大部份时间都会一直在这个分支上面码代码了。
现在,像往常那样使用Git吧,但只限于develop分支上面的一些小的功能哦。如果你要开始开发一个稍大的功能点,就基于develop创建一个功能分支吧,假设你要增加一个登录(login)页面:
$ git flow feature start login
该命令会基于我们的develop分支创建一个feature/login分支,并切换到该分支上。你在该分支上开发并提交代码,当你完成登录页面的开发后,这样来结束它:
$ git flow feature finish login
该命令将会把feature/login合并到develop分支,然后删除功能(feature)分支。
当你的功能点都完成时(需要发布新版本了),就基于develop创建一个发布(release)分支,然后升级版本号并在最后发布日期前把Bug Fix掉吧:
$ git flow release start v0.1.0
当你在完成(finish)一个发布分支时,它会把你所作的修改合并到master分支,同时合并回develop分支,所以,你不需要担心你的master分支比develop分支更加超前。
最后一件让git-flow显得威武的事情是它处理热修复(即时的BugFix)的能力,你可以像其他分支一样地创建和完成一个热修复分支hotfix,区别是它基于master分支,因此你可以在产品出现问题时快速修复,然后通过”finish”命令把修改合并回master和develop分支。
威武吧?那你还在等神马呢?
以下是自己做的一个tip:
git flow feature start xxx.1.0 (它会基于develop开一个分支,用于功能开发)
git flow release start xxx.1.2 (它会基于develop开一个分支,用于提测和bug修复)
git flow hotfix start xxx.1.2 (它会基于master开一个分支,用于线上bug紧急修复)git flow feature finish xxx.1.0 (它会merge到develop上)
git flow release finish xxx.1.2(它会merge回master和develop)
git flow hotfix finish xxx.1.3(它会merge回master和develop)
基本的流程就是:
开发一个新需求时基于develop开feature分支(这个feature你可以理解为你自己的私有分支);
开发完成后finish feature分支合并到develop。
然后开release分支用于提交测试并在release上修复测试人员提交的bug;
bug修复完成以后finish release上线,它会同时合并到master和develop,这样上线就直接上master了。
当你有紧急bug需要修复时才基于master开hotfix进行修复,修复完成以后finish hotfix,它也会同时合并到master和develop,上线同样也是上master。