Phenmod Zhu's Blog

注意你的注意力

用 Git-flow 做分支管理

关于git-flow

git 鼓励我们多开分支,但是没有一套模型告诉我们如何管理分支,有人总结了一条最佳实践惯例:git-flow,并且提供了一套 git-flow工具来方便我们实践它。该工具的每个命令都能实现数个 git 命令才能实现的功能,使用起来还是比较方便的。

Git flow 開發流程这篇文章介绍了git-flow的入门使用方式。

git-flow 创始人写的关于 git-flow 的文章:A successful Git branching model。里面详细描述了 git-flow 的工作方式。这儿有两篇不错的中文翻译: Git开发管理之道一个成功的Git分支模型

git-flow的cheatsheet,里面列出了常用的命令: cheatSheet

该网页比较直观地展示出每个 git-flow 命令实际都做了哪些操作,值得一看。还提供了中文版,翻译得不咋地。

安装

github上git-flow的安装页

如果在mac上安装了brew,直接用brew安装

brew install git-flow

git-flow-completion

命令行不默认自动补齐git flow命令,安装一个git-flow-completion,它可以让你的Bash、Zsh支持命令行自动补齐,github项目地址在此

我用的oh-my-zsh,它的最新包里面有git-flow插件(~/.oh-my-zsh/plugins/git-flow),这个插件其实用的就是git-flow-completion的内容。修改~/.zshrc的plugins,添加使用git-flow插件即可。我的plugin列表如下

plugins=(git git-flow git-flow-completion python svn xcode ruby perl)

(关于brew和oh-my-zsh,参见文章:mac上常用软件)

使用

init

git flow init [-d] 提示你各个分支的命名及tag前缀。[-d]表示接受所有默认设置。

开发新功能(feature)

based on develop

1
git flow feature start login

develop 分支创建了一个新的分支 feature/login,并自动切换到这个分支下面。然后就可以进行 login 功能开发,中间可以多次的 commit 操作。开发完毕后:

1
git flow feature finish login

feature/login分支的代码会被合并到 develop 里面,然后删除该分支,切换回 develop. 到此,新功能开发这个场景完毕。

1
git flow feature publish MYFEATURE

如果是合作开发,需要发布新特性到远程服务器,其它用户也可以使用这分支。

1
git flow feature pull MYFEATURE

取得一个其它用户发布的新特性分支,并签出远程的变更。

发布上线前(release)

1
git flow release start v0.1.0 [BASE]

git-flow 从 develop 分支创建一个新的分支,做发布前的一些事情,如修改版本号,fix最后的一些bug。

完成后,

1
git flow release finish v0.1.0

git-flow 会依次切换到 master develop 下合并 release/0.1 里的修改,然后用 git tag 给当次发布打上tag v0.1.0。 release分支里的东西会自动合并到master和develop里。

1
git flow release publish v0.1.0

创建 release 分支之后立即发布允许其它用户向这个 release 分支提交见容是个明智的做法。命令十分类似发布新特性。

1
git flow release track v0.1.0

签出 v0.1.0 版本的远程变更

紧急bug修正(hotfix)

1
git flow hotfix start bug1 [BASENAME]

git-flow 从 master 分支创建一个新的分支 hotfix/bug1,并切换到该分支下。接下来要做的就是修复 bug,完成后:

1
git flow hotfix finish bug1 

git-flow 会依次切换到 master、develop 分支下合并 hotfix/bug1,然后删掉 hotfix/bug1。到此,hotfix 完成。

support分支

1
2
git flow support
git flow support start <release> <base>

也是从 master创建的新分支,目前不推荐用。

git-flow 的 feature、release 都是从 develop 分支创建,hotfix、support 都是从 master 分支创建。