GIT如今被广泛应用于企业开发项目托管,随着我们项目规模的扩大, 开发人员的数量也逐渐扩增,呈现出不同的开发等级,而不同的等级,也需要不同的权限管控。
如果没有做好代码分支的管控,就会导致发布新功能时,将还未测试好的功能也一起发布的,导致严重的线上问题。而分支管控的概念就在于,同时开发新功能时,不同功能的代码存放到不同的地方,形成代码隔离,发布时从指定地方的代码发布,还没有经过测试的代码就不会错发,因为两个功能的代码根本不在一个地方。当另一个功能发布时,再将其和之前已经测试好的功能代码合并,这样既保证不会错发未经测试的代码,也保证后发布的代码包含了已经测试的功能
所以今天,我们来聊一聊,企业git的管控
1. 权限等级
首先我们需要明确项目开发中需要涉及的权限等级:
权限等级 | 描述 | 赋权角色 |
---|---|---|
项目创建者 | 项目创建者拥有项目的最高权限,包括删除项目、管理成员、设置权限,一般由开发组leader来创建项目 | 开发组leader |
项目管理员 | 项目管理管理员除了删除项目和清空项目外,拥有其他的全部权限 | 团队leader、运维管理人员 |
项目主开发者 | 项目主开发者可以添加tag,管控分支、添加项目成员,核心开发人员可以赋予该权限,一般拥有master分支的管控权限 | 核心开发人员 |
项目开发者 | 项目开发者拥有项目代码拉取、开发、提交等权限,一般将权限赋予研发人员,但需要注意的是要针对分支做好把控,这点我们后面详细讲解 | 研发人员 |
项目观察者 | 项目观察者可以克隆代码,但是不能提交 | 品质保证(OA)、产品经理(PM) |
项目报告者 | 项目报告者只能创建issue、评论,不能读写代码,但在企业内部开发中很少用到该权限,因为一般有问题都会提在禅道等管理平台上 | 访客、测试 |
2. 分支管理
企业内部开发中,我们一般分成以下几种分支:
- master分支
1、主分支,创建项目时即创建的分支,用于部署生产环境的分支,是所有分支的主干,与当前线上代码保持统一
2、由主开发人员、研发组leader管控、不允许其他开发在该分支上直接开发
- tag标签
每次从master发布生产环境后,需要用tag标记一个版本,再master分支上的每个tag都对应历史的一个线上版本。方便后续追溯及复查代码
- develop分支
1、开发分支,开发者各类开发功能的合并分支,即当前最新功能的分支。
2、开发人员会将自己开发的功能分支提交到dev分支上,由主开发人员来进行审核,通过后合并到dev分支上,一般测试环境就是从develop分支拉取代码
3、不允许开发者在该分支上直接开发
- feature分支
1、功能开发分支,需要开发新功能时,每个开发者以develop分支为基础,从dev或master分支拉取代码,并创建新的feature分支,比如开发者ben,那么就拉取并创建新的分支feature-ben。
这里存在一点分歧,有的推崇从master拉取feature,有的推崇从dev拉取feature,两者各有优劣:从master拉取,这样能保证与生产环境一致,确保拉取的代码是‘干净’的。但存在的问题的dev如果有测试中的功能,并且与将要开发的功能有重叠的话,可能会导致代码冲突;所以衍生第二种方式:从dev拉取,好处是上述所说减少代码冲突,保证代码最新。开发完成后再合并到dev分支。如果测试周期较短,从master获取也没问题
2、功能开发完成后,就提交到develop分支上,由主开发者审核合并,功能开发完成后需要删除feature分支,下次开发时再冲突拉取创建
3、但需要注意的是,有的功能开发周期可能比较长,或者与其他功能的冲突率比较高,那么就需要定期拉取代码,避免长时间不更新代码,再次提交时出现较多的代码冲突。即使出现冲突,也能少处理一些。
- release分支
1、发布分支,feature分支合并到dev分支后,准备发布新版本时,再创建一个新的release分支,分支名可以以功能名命名,比如release-user,允许存在多个release分支。
2、预生产环境从release分支拉取代码发布,如果出现bug就从release分支拉取bugfix分支进行修复,测试成功后,release分支合并到dev分支和master分支,并且删除release分支
3、release分支很多没有预生产环境的公司会选择忽略该分支,直接提交到master分支进行发布,这里也由大家根据公司情况进行选择
4、不允许开发者在该分支上开发
- bugfix分支
1、bug修复分支,也叫hotfix分支,正式发布之后会出现bug,这时需要开发者从master或者release分支拉取并创建一个bugfix分支,分支名可根据开发者名称来命名,比如bugfix-ben。
2、修复完成之后,合并到master或release分支上,并且删除bugfix分支
总结
根据以上描述,企业开发时,实际上长期存在的分支只有master和dev分支,其他分支都是多个且临时的
3. 常见操作
以下操作基于gitee演示,其他git服务端类似,大家可自行摸索
3.1 如何创建分支
1、点击分支
,进入分支管理页面
2、点击新建分支
3、选择基于哪个分支创建,输入分支名称,点击提交
4、创建成功
3.2 如何设置分支权限
1、点击保护分支设置
,点击新建规则
2、输入需要设置的分支名,支持通配符形式,比如release*
设置可推送代码成员、可合并提交成员,这里可设置角色或具体的开发人员
确认后点击保存
3.3 如何删除分支
1、点击分支
2、选择需要删除的分支,点击删除
3.4 如何给master分支打上tag标签
1、点击标签
2、点击新增标签
3、输入标签名称,一般以版本号命名;输入标签描述,一般是本次发布的功能名;选择从哪个分支发布,默认master
3.5 如何在IDEA中更新分支信息
1、点击更新项目
2、点击右下角的分支名,然后就可以看到我们刚刚创建的分支了
3、如果需要切换到新的分支,并拉取代码的话,点击分支名,点击checkout
即可
4、看到右下角的分支名已经更换了,即表示切换成功
5、再次提交代码就会看到走的就是新分支了
总结
那么本期我们的git分支管控就到此结束了,企业生产中要把控好安全生产,就要严格控制好分支权限,开发时定期更新,减少冲突