前言
当在团队开发中使用版本控制系统时,商定一个统一的工作流程是至关重要的。
Git
的确可以在各个方面做很多事情,然而,如果在你的团队中还没有能形成一个特定有效的工作流程,那么混乱就将是不可避免的。
git-flow
就是当前非常流行且行之有效的工作流程, 是一个Git
扩展集,按 Vincent Driessen 的分支模型提供高层次的库操作,并且提供了极其出色的命令帮忙以及输出提示,本文中有演示操作,可以仔细阅读并观察发生了什么事情
git-flow 安装
安装指南:https://github.com/petervanderdoes/gitflow-avh/wiki/Installation
准备工作(Windows)
按照官方给出的安装方法,依次点击三个链接:
三个要下载的都是 Binaries
的 zip 格式文件,下载完后只需要把各自 bin 目录下的对应文 (getopt.exe,libintl3.dll,libiconv2.dll
) 件复制到 git 安装目录的 bin 目录下即可, 其他的都不需要,版本和路径根据自己的情况而定
Clone the git-flow
打开 Git Bash
执行:
git config --global url."https://github".insteadOf git://github |
如果不执行这条命令,直接执行下面命令的话,clone 会出现卡住现象
git clone --recursive git://github.com/nvie/gitflow.git |
打开powershell
(以管理员身份运行), cd 到下载 gitflow
的目录下
PS C:\Users\Administrator> cd .\gitflow\ |
测试是否安装成功,打开 Git Bash
Administrator at 14:56:56 / git flow help |
git-flow 使用
开发新功能 ( Feature )
需求:添加一个 README.md
文件,并添加内容
创建 my-feature
分支
Administrator at 16:04:03 Go-fun (develop) git flow feature start my-feature |
根据提示,我们知道一个新的分支 feature/my-feature
基于 develop
分支创建好了, 并且目前我们所在的分支为 feature/my-feature
,可以查看下分支情况
git branch |
在 feature/my-feature
分支新建一个 README.md 并提交
vi README.md |
完成 feature
分支合并
根据之前创建分支的提示可知,在完成新功能的开发后,可使用 git flow feature finish <name>
提交合并
git flow feature finish my-feature |
根据提示,我们看到了 git flow feature finish my-feature 这条语句的作用。
feature/my-feature
分支被 merge 到了develop
分支- 本地
feature/my-feature
分支被删除,现在我们处于develop
分支
参看分支情况:
git branch |
不使用 git-flow
在不使用 git-flow
工具的情况下,怎么实现
新建一个分支
git checkout -b my-feature develop
当开发完成后,合并分支。
git merge --no-ff my-feature
Already up-to-date.删除本地 my-feature 分支
git branch -d my-feature
提交更改到远程 develop 分支
git push origin develop
比较两种方式就会发现,git flow 方便了分支的管理, 使用上更为简单
发布版本 ( Release )
需求:添加一个 README.md
文件,并添加版本号与日期
创建 release 1.0
分支
Administrator at 17:37:59 Go-fun (develop) git flow release start 1.0 |
根据提示,流程和创建 feature
分支差不多,查看分支情况
git branch |
添加修改文件到暂存区
git add README.md |
完成 release 1.0
分支
Administrator at 19:00:28 Go-fun (release/1.0) git flow release finish 1.0 |
根据上图的提示,发现这一步做了如下的事情。
release/1.0
分支已经被 merge 到了 master 分支- 版本被打上
tag 1.0
elease/1.0
被 merge 到了develop
分支- 本地
release/1.0
被删除 - 切换分支到
develop
更新远程分支
git push origin master |
不使用 git-flow
创建 release-1.0 分支
git checkout -b release-1.0 develop
Switched to a new branch 'release-1.0'提交到分支 release-1.0
git commit -am "Bumped version number to 1.0"
切换分支到 master
git checkout master
合并 release-1.0 到 develop 分支
git merge --no-ff release-1.0
打上标签 (tag)
git tag -a 1.0 -am "message"
切换到 develop 分支,并合并到 develop 分支。
git checkout develop
git merge --no-ff release-1.0删除本地分支 realse-1.0
git branch -d release-1.0
更新远程分支
git push origin master
git push origin develop
git push --tags
如果说在开发新功能的时候你没体会到 git flow
的优点,那么在 release 版本的时候,就能很明显地感受到 git flow
的优势
紧急修复 ( Hotfix )
git flow 基于 master 分支,用于紧急修复,修改完成后要 merge 到 master,develop 分支
使用 git-flow
git flow hotfix start 1.0.1 |
不使用 git-flow
git checkout -b hotfix-1.2.1 master |
其他步骤与在 release 开发相同,同样不要忘了在 master 分支打上 tag