前言
在之前所做的小项目中,只把git当作版本存储工具使用,在团队合作方面未有了解。
接到一个功能后,很自然的就把它提交到了origin/kick下,结果挨训了
于是了解了一下Git-Flow相关概念和使用,在这里做个记录
Git-Flow简介
首先,Git作为一个源码管理系统,不可避免涉及到多人协作,而协作就必须要有一个规范的工作流程(Flow),让大家更有效的合作,这样才不会发生冲击碰撞。
一个成熟的项目,应该存在两个长期分支。
1 | 1. 主分支 master |
master用于存放对外发布的版本,一般不在master上直接进行开发,而是通过将其他分支合并到master分支的方式,修改master。
develop分支用于日常开发,存放最新的开发版。
除此之外,项目应该还存在三种短期分支。
1 | 1. 功能分支 feature (一般是基于develop的) |
一旦开发完成,他们就会被合并到develop
或master
,然后被删除
他们的关系如下:
Git-Flow使用
下载
下载Git-Flow,在mac/linux下可以通过如下命令安装:
1 | brew install git-flow |
使用
初始化
进入项目文件夹(.git所在到文件夹)下,输入如下命令
1 | git flow init |
接下来设置每个分支的名字,一般不需要更改,按默认的全程回车就好
功能模块
增加新功能
就以我上面所提到的kick功能为例,我需要在feature下创建一个kick的分支,命令如下:
1 | #git flow feature start 分支名 |
这个命令会创建一个feature下的分支,并自动切换到该分支
完成新功能
在这个功能完善之后,通过如下命令将其合并到develop并删除分支。
1 | #git flow feature finish 分支名 |
这个命令会将该feature下的kick分支合并到develop,并自动删除该kick分支
版本管理
创建新版本
当在某个阶段,我们的feature都已经完善,并且通过了测试,我们可以将该develop分支进行发布(release)。
1 | #git flow release start 版本号 |
需要注意的是,发布分支是使用版本号命名的。
发布新版本
通过如下命令发布新版本
1 | #git flow release finish 版本号 |
该命令会触发如下几个操作
- Git-Flow从远程仓库fetch数据以确保本地的数据是最新的。
- 内容被合并到“master”和“develop”
- 发布分支被删除,回到develop
修复bug
创建修补分支
不写bug到程序员不是好程序员。我们总会遇到这样一种情况,当我们新版本上线后,却被发现了bug。二bug修复无论在release还是在feature上都不太合适。于是Git-Flow为我们提供了hotfix分支。命令如下:
1 | #git flow hotfix start 分支名 |
该命令将基于master创建一个修补分支。
完成修复程序
但熬到凌晨两点修复完这个bug后,我们需要通过如下命令发布该修复的分支。
1 | #git flow hotfix finish 分支名 |
该命令和完成发布非常相似,会进行如下操作:
- 该修改会同时合并到develop和master(以确保错误不会再次进入下一个版本)
- 分支被删除,并在此进入develop
小结
Git-Flow并没有在Git上添加然后新功能,它只是一组将Git命令捆绑到工作流中的脚本。没有Git-Flow也可以用Git自带的命令完成这些功能。
另外,经过这次,在Git团队协作方面总算是入门了。