这次讲git和gitlab的常见分支合并使用场景,不管使用什么vcs工具,对版本控制技术的深入理解和熟练掌握能避免在开发过程中产生过多障碍,帮助开发过程变的流畅自如,使之成为真正的workflow。

开始之前需要掌握的知识点,具体指令参考git官网指南

Git更新本地分支;

Git 推送本地分支到服务器;

Git 跟踪分支;

Git分支本地合并;

Git分支远程合并 (MergeRequest);

Git删除本地和远程分支;

      用常见的开发场景举例,开发组织由几个人围绕一个或者多个分支并行进行开发,在开始项目开发之初,在gitlab创建远程代码仓库,默认情况下,远程vcs会有一个受保护的master分支不允许将本地修改后的代码直接推送代码的受保护分支。在实际的项目合作开发过程中,开发人员如何将本地分支与远程受保护分支进行合并?

解决方案:不使用Fork

      项目负责人在gitlab上新建一个项目,master为主干,此分支的代码不允许直接修改,只能由其它分支(一般只由develop分支)发出merge请求,经项目管理员代码审查通过后合并代码。项目组其他成员,得到开发任务克隆项目的代码仓库地址到本地仓库,查看分支状态。有一个本地分支和有一个相应的远程分支。

gitlab 将群组与项目分开 gitlab删除群组_gitlab上传本地项目

      开发想将本地仓库修改推送到受保护分支,可采取本地新建开发分支后,将分支推送到远程仓库,启用gitalb的MR(merge request)策略,代码开发负责人审核代码后将代码合并。

gitlab 将群组与项目分开 gitlab删除群组_gitlab 将群组与项目分开_02

      在推送本地分支到远程分支时,因为自建分支是不受保护的,可以随意提交修改到远程,并且在提交时创建跟踪分支。跟踪分支是与远程分支有直接关系的本地分支。

gitlab 将群组与项目分开 gitlab删除群组_gitlab使用_03

       Developer登陆到远程gitlab管理界面中,就会看到gitlab自动识别出了一个MR请求

gitlab 将群组与项目分开 gitlab删除群组_gitlab上传本地项目_04

      打开MR请求合并,选择正确的初始分支和目标分支,并完成合并请求的申请。

gitlab 将群组与项目分开 gitlab删除群组_gitlab 将群组与项目分开_05

      项目管理者登陆到项目管理页面控制台中,看到一个合并请求并对提交的修改和代码进行审核。

gitlab 将群组与项目分开 gitlab删除群组_gitlab使用_06

      在一般的分支合并策略中,除了master之外的分支都可以成为功能分支或者临时分支,合并完成后,都可以不用保留,这种方式比较适合TBD。

解决方案:使用fork

gitlab 将群组与项目分开 gitlab删除群组_gitlab上传本地项目_07

      项目负责人在gitlab上新建一个项目,当项目紧急的情况下,通常需要协调其他项目开发人员来协助开发某些模块,为了解决跨项目协作问题,gitlab提供了fork功能,复制目标仓库的副本到个人GitLab帐号下。

gitlab 将群组与项目分开 gitlab删除群组_gitlab 将群组与项目分开_08

      这相当于是从负责人那拷贝了一份项目副本,无论开发人员如何修改代码都不会影响负责人master分支上的代码。

      Fork完成后开发人员可以根据项目分工,像对待普通项目一样操作。修改本地仓库的代码,并且提交修改到远程分支,在gitlab自己的工作空间内新建一个MR请求,向负责人发送代码合并请求。

gitlab 将群组与项目分开 gitlab删除群组_gitlab 将群组与项目分开_09

      生成合并请求

gitlab 将群组与项目分开 gitlab删除群组_gitlab 删除分支_10

      目标分支管理人查看并合并请求

gitlab 将群组与项目分开 gitlab删除群组_gitlab 删除分支_11