在学习git项目分支管理之前大家对git 概念,git命令,git使用不清楚的可以参考此文章链接: 猴子都能懂的git 直接点击红色字体即可 。
1,下面给大家看一个完整的官方成功的git分支管理图。
这个用例主要分为
- 主分支
- 特性分支
- release分支
- hotFix分支
分别使用4个种类的分支来进行开发的。
主分支有两种:master分支和develop分支
-
master
master分支只负责管理发布的状态。在提交时使用标签记录发布版本号。 -
develop
develop分支是针对发布的日常开发分支。刚才我们已经讲解过有合并分支的功用。
特性分支
特性分支就是我们在前面讲解过的topic分支的功用。
这个分支是针对新功能的开发,在bug修正的时候从develop分支分叉出来的。基本上不需要共享特性分支的操作,所以不需要远端控制。完成开发后,把分支合并回develop分支后发布。
release分支
release分支是为release做准备的。通常会在分支名称的最前面加上release-。release前需要在这个分支进行最后的调整,而且为了下一版release开发用develop分支的上游分支。
一般的开发是在develop分支上进行的,到了可以发布的状态时再创建release分支,为release做最后的bug修正。
到了可以release的状态时,把release分支合并到master分支,并且在合并提交里添加release版本号的标签。
要导入在release分支所作的修改,也要合并回develop分支。
hotFix分支
hotFix分支是在发布的产品需要紧急修正时,从master分支创建的分支。通常会在分支名称的最前面加上 hotfix-。
例如,在develop分支上的开发还不完整时,需要紧急修改。这个时候在develop分支创建可以发布的版本要花许多的时间,所以最好选择从master分支直接创建分支进行修改,然后合并分支。
修改时创建的hotFix分支要合并回develop分支。
重点1:看了上面图和文字,但是还是感觉很懵,不太理解这个分支到底是怎么管理运作的。
通俗简单总结一下:
master分支是用于上线的分支,任何人不能将代码提交到master分支,上线以后由项目负责人打tag,或者jenkins直接部署成功以后自动打tag。master生命周期一直延续不会销毁删除。
develop分支是一个公共开发分支,所有开发人员基于develop分支去创建新分支开发自己的功能代码,开发完成以后将代码合并到develop分支。develop生命周期同master一样一直延续不会销毁删除。
当所有的feature开发分支合并到develop以后,此刻再从develop分支创建一个release(预发布)分支,测试人员部署release分支进行测试,如果有bug 直接在release分支修改,当release分支测试完成可以上线的时候要将release分支合并到master分支和develop分支。至此release生命周期结束,可以销毁删除,等待下一波开发分支合并到develop分支以后又会有一个新的release2分支创建。
feature开发分支是,各自团队根据各自业务需求从develop创建出来小团队开发的分支,小团队下面的开发人员再从feature开发分支创建自己的开发分支进行开发。feature生命周期结束,可以销毁或者删除。
hotfix分支是在master发布以后第二天发现线上有bug,但是这时候develop分支又还在开发代码,这时候需要从昨天上线master的最新的tag分支去创建一个hotfix分支进行补丁修复,修复成功以后要将hotfix分支合并到master和develop分支,并把最新的master分支再打tag。至此hotfix生命周期结束可以销毁删除。
提醒:分支销毁删除,不要马上删除,等待上线一周后操作。
重点2:看了上面的分支管理,貌似还是停留在理论,实际开发中会遇到很多问题。
问题:1,向上合并冲突怎么解决?
2,同一个项目2个小团队同时提测,预计同时上线,测试分支该怎么办?
3,同时提测的2个团队,其中有一个团队业务遇到问题可能不能同时上线以后怎么办?
4,2个团队同时开发,对接api版本分支又不同怎么办?
5,代码明明commit了部署以后发现还是没有修改的代码?
6,很多同学喜欢将很多项目放在同一个git目录,他们的疑问可能是git分支太散,我的项目引用了其他git分支代码,我开发时候总不能每次都改了以后deploy到远程私服,再更新远程私 服再开发吧?
以上问题是同学们在实际开发中常常遇到的,我之前也遇到了这些坑。
总结一下无非以下原因以下3点:团队和团队之间的并发,程序员和程序员之间并发,项目分支耦合性太强。
那下面我给大家讲如何避开上面那些坑,出现上面的问题根本原因是测试人员只有一组,下游开发同时提测,测试资源产生并发和竞争。再加上一些线上bug修复,分支没有搞好是不是很心力交瘁。。。。。
上面第一节讲了官方的一个成功的git分支管理案例,解释了每个分支的作用和生命周期。 但是上面分支管理只适用于永远是单个开发团队对应单个测试团队,如果出现多支开发团队对应一个测试团队,那么上面分支管理将不适用!请看第2章多支开发团队对应1支测试团队,并在最后解答重点2提出的6个问题。
2,多支开发团队对应1支测试团队的git分支管理
先看图,思考此图跟第一节分支管理图有何不同?图片不清晰可以下载到本地放大看
先例举出各个分支的生命周期:
|
分支名称 |
创建节点 |
销毁删除节点 |
第一节销毁删除节点 |
|---|---|---|---|
| master | 初始化项目时候 | 不销毁 永久 | 不销毁 永久 |
| release | 初始化项目从master创建过来 | 不销毁永久 | 上线以后可以销毁删除 |
| develop | 初始化项目从master创建过来 | 不销毁永久 | 不销毁 永久 |
|
feature |
从develop分支创建过来 | 上线以后可以销毁删除 | 上线以后可以销毁删除 |
|
feature-开发 |
从feature分支创建过来 | 上线以后可以销毁删除 | 上线以后可以销毁删除 |
| hotfix | 从master的tag分支创建 | 上线以后可以销毁删除 | 上线以后可以销毁删除 |
| tag | 每次master上线以后从master分支创建 | 不销毁 永久 | 不销毁 永久 |
以上图表看着貌似跟第一节的分支销毁节点都差不多,唯独release分支在第二节中是不销毁永久存在。每个分支的作用不作过多赘述,下面直接讲开发流程。
开发流程:
1,在初始化项目时候同时创建master,release,develop分支,而且这3个分支永久并行,永不删除,如果想要提交代码到这3个分支,需要去gitlab项目管理网站提交mergerequest,由项目负责人审核查看变化代码是否正常才能合并到此3个分支。
2,A团队需要开发项目,从develop分支创建分支feature-A(分支名字用feature-业务名称),A团队下面有3位开发,他们分别是张三,李四,王五,然后他们3个分别基于feature-A创建自己的开发分支feature-A-张三,feature-A-李四,feature-A-王五,团队成员开发完成以后去gitlab网站提交合并请求往feature-A合并自己的开发代码,合并有冲突先把 feature-A 分支merge到你自己的开发分支,再提交合并。(这个merge过程就是 张三,和李四的代码已经合并到feature-A了,王五把feature-A分支代码merge到自己分支,相当于更新了张三和李四代码到自己的分支)
3,B团队团队需要开发项目,跟A团队一样,他也从develop分支创建分支feature-B,然后团队其他成员创建各自分支,feature-B-tim,feature-B-cat,feature-B-tiger 举例以上3个分支。
4,现在A,B两个团队都需要提测,他们把feature-A ,feature-B合并到develop分支,测试打包打develop分支即可,这样一支测试团队可以测多支开发团队的代码。(提醒:严禁将develop分支代码向下合并到各自的业务开发分支,防止把自己的业务分支污染)
5,如果B团队临时变卦,不能跟A同时上线,那么也没关系,A团队只需要在测试团队测试ok以后,把feature-A合并到release分支,然后测试只需要对release分支进行最后一轮测试,测试完成以后,将release分支合并到master,用master分支进行线上部署,部署成功以后进行冒烟测试,测试ok 可以打tag,程序员可以下班回家了。
下面来回答第一节中例举的6个问题:
问题:1,向上合并冲突怎么解决?
答:比如向上合并release分支冲突,需要先将release向下合并到你自己的feature业务分支,解决冲突以后push到远程仓库,再进行向上合并。
2,同一个项目2个小团队同时提测,预计同时上线,测试分支该怎么办?
答:第二节中的开发流程,是将业务分支都往develop分支合并,测试只需要永远测试develop分支就可以了。
3,同时提测的2个团队,其中有一个团队业务遇到问题可能不能同时上线以后怎么办?
答:第二节中的开发流程看第五点回答此问题。
4,2个团队同时开发,对接api版本分支又不同怎么办?
答:对于api版本,可以统一一个固定 版本号,用develop发布到私服,这样私服上面有 业务A和B的两边的代码,版本一样,也不存在冲突问题。
5,代码明明commit了部署以后发现还是没有修改的代码?
答:推荐使用tortoiseGit 进行本地项目管理,可以清晰看到代码变化,如果发现代码已经commit,远程分支没有的,只需要重新push一次即可。
6,很多同学喜欢将很多项目放在同一个git目录,他们的疑问可能是git分支太散,我的项目引用了其他git分支代码,我开发时候总不能每次都改了以后deploy到远程私服,再更新远程私 服再开发吧?
答:只需要将不同分支代码clone到一个文件目录,用ide打开这一个目录,在项目中直接引用其它项目project即可满足需求。
转载请标注来源,盗版必究!