一、前言
如果有人问你,当下最流行的“版本管理系统”(Version Control System)是什么,那你一定要毫不犹豫的告诉他,非Git莫属。
Git
相比同类软件,Git有很多优点。其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便。有些传统的版本管理软件,分支操作实际上会生成一份现有的代码的物理拷贝,而Git只生成一个指向当前版本(又称”快照“)的指针,因此非常快捷易用。
但是,太方便了也会产生副作用,如果你不注意,很可能留下一个到处都是分支,完全看不出主干发展的脉络。而本篇文章正是为了避免开发分支混乱而生。
二、分支管理
1.历史分支
相对使用仅有的一个master分支,Gitflow工作流使用2个分支来记录项目的历史。master储存正式发布的历史,develop分支作为功能的集成分支。这样也方便master分支上的所有提交分配一个版本号。
2.功能分支
每个新功能位于一个自己的分支,这样可以push到中央仓库以备份和协作。但功能分支不是从master分支上拉出来的新分支,而是使用develop分支作为父分支。当新功能完成时,合并回develop分支。新功能的提交不直接与master交互。
3.发布分支
一旦develop分支上的功能到了发布日期,就从develop分支fork一个发布分支(一般叫release)。release分支用于预发布测试,所以从这个时间点开始后新的功能不再加到这个分支上,release分支只应该做bug修复、文档生成和其他面向发布的任务。一旦release测试完毕并准备发布后,将其合并到master分支并分配一个版本号打上Tag。另外,release上做的bug修改要合并回develop分支。
使用一个专门用于发布的分支,是一个团队可以在完善发布版本的同时,另一个团队继续开发下一个版本功能。
4.维护分支
维护分支(一般叫hotfix)是唯一可以直接从master分支fork出来的分支,用于线上版本bug修复。修复完成后,应马上合并回master和develop分支,同时master分支用新版本号打上Tag。
结语
通过上面几个图文的解释,其实Git分支并不复杂,无非是master(线上),develop(开发),release(预发布),hotfix(线上bug修复)这四种常用的分支
我们以在办公中常见的开发场景为例,来具体介绍分支的用法,同时附带一些简单的Git指令
一、新项目来啦
公司里来了一个新项目,大A是开发组长,小b小c是开发组员,接到任务后,大A首先在中央仓库建立一个项目仓库,master为主分支,然后大A在本地为master配套一个develop分支,push到服务器上
git branch develop
git push -u origin develop
以后develop分支将会包含项目的全部历史,而master只包含部分历史。当小b和小c需要开发时,他们应该先链接中央仓库,然后检出develop分支
git checkout -b develop origin/develop
checkout命令加 -b 代表创建并切换,相当于以下两条命令
git branch develop
git checkout develop
二、小b和小c开始开发新功能
大A给小b小c分配完任务后,他们开始各自的开发,这时,他们需要为各自的功能创建相应的分支,新的分支应基于develop分支,而不是master分支。
git branch branch-name develop
这里的branch-name自己可以随意定义名称,但是千万别用test,因为我试过,这个名字非法,哈哈哈
三、小b小c完成功能开发
开发功能完成后,小b小c觉得功能ok了,这时候他们就可以把自己的分支合并到develop上,然后push到中央仓库
git pull origin develop
git checkout develop
git merge branch-name
git push
//如果觉得当前分支不需要了,可以执行
git branch -d branch-name
第一条pull,是确保在合并功能前develop分支是最新的,注意,功能只能合并到develop分支
四、组长准备功能发布
组长大A在看到组员功能完成后,准备发布第一个功能测试版本
git branch release/v0.1.0 develop
这个分支是清理发布、执行所有测试、更新文档的地方,一个用于专门改善发布功能的分支。
只要把这个分支push到中央仓库,这个分支的功能就是冻结的。任何在develop的分支中的新功能都推到下一个release中
五、完成发布
一旦release测试完毕,这是,需要将release合并到master上,修改后的release同时也要合并回develop上,因为改好的功能在以后的develop分上也要体现出来
git checkout master
git merge release/0.1.0
git push
git checkout develop
git merge release/0.1.0
git push
git branch -d release/0.1.0
在release合并到master后,还要给master分支打tag以方便跟踪。
git tag -a v0.1.0 -m "initial public release" master
git push --tags
六、用户发现bug
对外发布后,发现有bug,为了处理bug,小b(小c)从master分支拉出来一个hotfix维护分支,提交修改以解决问题,然后直接合并回master和develop分支
合并完毕后,删除hotfix分支。
最后推荐一个可视化的git工具,SourceTree,方便新手同学使用