Git flow的基本概念以及使用
Git flow的基本概念以及使用
git flow的概念
git flow的基本概念
Git Flow 就是如何使用git 分支的一种规范,或者叫做推荐。
简单来说就是通过规范化的流程,使得产品、开发与测试等各个部门更高效的协同工作。
git flow的常用分支
根据Git Flow 的规范,我们要将Git 的分支分为 master 、develop 、hotfix 、release、feature这五个分支。
主要功能
- master 分支:用于存放对外发布的版本,任何时候获取到的都是稳定的已发布的版本。
- develop分支 :用于日常开发,存放最新的开发版。
feature分支 :可以存在多个,基于develop分支被创建,一般根据所需开发的功能来命名分支,每一个新的功能可以创建一个新的分支,开发结束后,需要将其合并到develop上- hotfix 分支:hotfix 分支用来修复生产中的紧急bug,由于develop分支尚处于开发过程中,代码不稳定,不能直接应用于生产
- release 分支:release 分支可以称之为预发布的版本。当我们认为develop版本的代码已经趋于成熟,我们可以打一个release分支。在release 分支上测试完成之后,要将代码合并到master分
- develop上。master 分支是线上版本,而合并到develop版本是因为,在测试过程中,一些细节的东西可能会修改,因此这些优化的内容也应该合并到最终版本以及开发版本中。
注意事项:
- 所有开发分支从 develop 分支拉。
- 只要有合并到 master 分支的操作,都需要和 develop 分支合并下,保证同步。
- master 和 develop 分支是主要分支,主要分支每种类型只能有一个,派生分支每个类型可以同时存在多个。
git flow和git的区别
- feature分支开发完成后,暂时不合并至develop,而是基于develop开启release分支,将feature分支合并到release分支,进行测试;
- release分支测试通过后,部署到生产环境,将release分支代码合并到develop分支与master分支,并在master分支打一个tag;
git的使用
安装
在git bash中输入:git clone --recursive git://github.com/nvie/gitflow.git d:\gitflow(指定git flow 安装目录)
进入gitflow\contrib路径下,执行:msysgit-install.cmd d:\git(git的安装目录)
打开Git Bash命令窗口,执行git flow
常用命令 (fbn:featureBranchName)
命令 | 含义 |
---|---|
git flow init | 初始化一个现有的 git 库,设置初始参数建议用默认值 |
git flow feature start [fbn] | 创建一个基于’develop’的feature分支,并切换到这个分支之下 |
git flow feature finish [fbn] | 完成开发新特性, 合并 MYFEATURE 分支到 ‘develop’, 删除这个新特性分支, 切换回 ‘develop’ 分支。 |
git flow feature publish [fbn] | 发布新特性分支到远程服务器,也可以使用git的push命令 |
git flow feature pull origin [fbn] | 取得其它用户发布的新特性分支,并签出远程的变更。也可以使用git的pull命令 |
git flow feature track [fbn] | 跟踪在origin上的feature分支 |
git flow release start [releasebn] | 开始准备release版本,从 ‘develop’ 分支开始创建一个 release 分支 |
git flow release publish [releasebn] | 创建 release 分支之后立即发布允许其它用户向这个 release 分支提交内容 |
git flow release track[releasebn] | 签出 release 版本的远程变更 |
git flow release finish [releasebn] | 归并 release 分支到 ‘master’ 分支,用 release 分支名打 Tag,归并 release 分支到 ‘develop’,移除 release 分支 |
git flow hotfix start [hotfixbn] | 开始 git flow 紧急修复,从master上建立hotfix分支 |
git flow hotfix finish [hotfixbn] | 结束 git flow 紧急修复,代码归并回 develop 和 master 分支。相应地,master 分支打上修正版本的 TAG。 |
新功能开发工作流
- 切换到本地仓库工作区
cd /workspace
- 从远程仓库克隆代码到本地仓库
git clone
基于master分支,创建develop分支 切换到master分支
$git checkout master
基于master分支克隆develop分支,并在克隆完毕后直接跳转到develop分支
$git checkout -b develop
推送develop分支到远程仓库
$git push origin develop
注:编码工作主要在develop分支,master分支主要用来发布稳定版本
- 在本地仓库的开发流程
John
提交修改到缓冲区 $git add .
提交修改到本地仓库 $git commit -m “修改说明”
每完成一个功能点可以对代码进行打包 $git tag -m “简要说明增加/修复/删除了什么功能”
注:不是每一个Tag都需要提交到远程仓库,比如可以在完成一个功能点的编码工作后未编译就打一个包,仅存储于本地仓库,在编译成功&测试通过后,再打一个新的Tag包(里程碑Tag包),仅将里程碑Tag包推送到远程仓库
- 推送代码到远程仓库
执行代码拉取操作,防止代码冲突
$git pull
解决代码冲突后,推送代码到远程仓库
$git push origin develop
注:禁止将未编译或编译不通过的代码提交到远程仓库,如果编码工作进行未完成可以提交到本地仓库中,等待该功能点全部实现后再将代码推送到远程仓库中。
- 将代码发布到测试分支
$git checkout develop
$git checkout -b release
$git push origin release
- 测试工作完成后,合并代码到develop分支
切换到develop分支 $git checkout develop
执行合并操作,将release分支代码合并到develop分支 $git merge release
如果合并报错,则解决冲突,冲突解决后继续再次执行合并
测试工作完成后,合并代码到develop分支
- 开发工作和测试工作都完毕后,发布时将develop分支合并到主线
$git checkout master
$git merge develop
- 开发工作和测试工作都完毕后,发布时将develop分支合并到主线
$git checkout master
$git merge develop