玖叶教程网

前端编程开发入门

Git 分支管理实践

Git是什么?

Git是目前世界上最先进的分布式版本控制系统

分布式版本控制与集中式版本控制的区别

集中式版本控制系统(SVN、CVS),版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。


分布式版本控制系统(Git)每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?分布式版本控制系统通常也有一台充当“中央服务器”的电脑,比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,可以使用“中央服务器”来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已

Why Git?

多人多线开发强大的分支管理飞快地切换、合并分支速度………………

本地仓库和远程仓库

本地仓库是每个人电脑上的版本库,在这里每个人可以自由地创建分支

#在本地创建一个名为 本地创建一个名为 a_new_branch 的分支

git checkout a_new_branch

远程仓库是远程服务器上的版本库,一般是由本地分支push到远程分支时创建

#将本地名为a_new_branch的分支推送到远程仓库

git push --set-upstream origin a_new_branch

在多人、多团队协作的环境中既需要规范每个人如何创建本地分支,也需要规范如何向远程仓库push代码,因为代码永远会跟测试流程、运维上线流程强关联,因此我们需要制定出一套符合测试、运维流程的分支管理的流程。

分支与系统环境的关系

一般在研发体系流程中,在上线某个新版本之前会经历 开发->测试->验收->上线 这几个过程,满足这几个流程的流转往往需要部署多套系统环境,且不同环境要做到代码隔离,互相不受干扰,因此每个环境需要部署独立的分支,假设在有4套环境的研发体系中,其分支分别是:

在这个研发体系中一个系统的上线会经历 开发环境 -> 测试环境 -> 预上线环境 -> 生产环境,每一个环境均对应了不同的Git远程分支,在部署时分别将不同分支的代码 pull 下来进行构建发布,分支间的代码一般采用 merge request 进行合并

注:部署多套环境一般是指用于后端或者H5端,App端在打包时打不同环境下的安装包即可。

分支的规范

一般来说研发是基于 特性 和 修复bug 的角度去维护和升级系统,因此在开发一个功能时分支名一般以 feature 开头,在修复 bug 时一般以 fixbug 开头,其过程为先从 master 拉取一个最新开发分支到本地,然后通过 merge request 合并到相应的开发环境分支,在不同的环境中发布不同的分支

#为1.1新版本创建一个功能分支

git checkout -b feature_v11_20201001 origin/master


#为修复bugid为123创建一个fixbug分支

git checkout -b fixbug_123_20201001 origin/master

分支权限控制

为了防止所有开发人员可以随意向远程分支push代码,一般需要关闭分支的Allowed to push权限、开放Allowed to merge权限,可结合 GitLab 来对分支的权限进行设置,

Settings->Repository->Protected Branches

分支的合并

既然上面关闭了Allowed to push权限,意味着所有的代码只能够通过merge request方式将代码提交到远程仓库,因此分支的合并流程就非常重要了,以下为远程分支的合并流程:

拉取一个新分支:feature_xxx <- master

合并到测试环境:feature_xxx -> qa

合并到生产环境:feature_xxx -> master


Code Review

代码审查是研发体系中不可缺少的一环,在研发流程中Code Review环节发生在发起dev分支到qa分支的merge request中,在GitLab中会看到本次merge request,根据review结果选择merge或者对review不通过的地方进行discussion,而开发人员可以对discussion进行resolve discussion,也可以设置只有当所有discussion resolve后才允许merge代码。

对merge request进行discussion:

设置只有当所有discussion resolve后才允许merge代码。

Code Review 一般可以借助企业内部沟通工具做到自动化的信息同步,以钉钉为例,可以结合钉钉机器人在GitLab上配置webhook,将 review 的 comment 以及 discussion 内容同步到钉钉群中。

群设置->智能群助手->添加机器人->选择GitLab

在GitLab中设置webhook

Settings->Integrations

当有comments产生时会自动将内容推送到钉钉机器人所在的钉钉群中,方便开发人员及时处理

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言