代码分支管理

前言

没有最好的代码管理方式,只有最适合当前需求的方式。

正文

移动项目中,有用SVN做代码管理,也有用Git。从效率上来讲,Git会比SVN更优:最直接的是SVN在切换分支时比较慢。
为了适应敏捷开发的快速迭代,代码管理工具大体都在慢慢切向Git。
本文是介绍项目中用Git管理代码分支遇到的问题。

项目初期

用Git管理代码,首先要区分分支,最直接的做法是仅提供两个分支:
为了保持开发阶段的便利,提供develop分支,作为日常开发的提交分支;
为了保证外网代码的可查,提供master分支,作为日常发布的打包分支;
当版本发布之后,还需要打tag记录对应版本,比如说release_1.0.0.10。(版本号通常为3位,第四位是build号,用于苹果审核时对同版本的不同二进制版本做一个区分)

随着版本迭代,有两个新的诉求出现:
1、code review,每个版本的新增代码要经过review再发布,以控制版本质量;
2、版本灰度的需要,并且可能会有一灰、二灰、三灰等多次灰度;

最初使用的是cherry-pick功能,在develop分支的代码以需求作为维度,当某个需求做完(QA验收通过)之后,就可以通过cherry-pick的方式将代码提到一个master的分支,再走merge request的方式合入master,此时reviewer可以review本次提交的代码并同意合入分支。

这样好处是可以仅保留两个分支,需求的开发、测试和验收都在develop分支,灰度的bugfix都在master分支进行。在项目早期测试和验收人力非常宝贵的情况下,同一条分支验收可以兼顾多个需求,较大程度提高验收效率;而且初期参与写代码的研发就寥寥数人,统一分支开发也是方便研发同时对多个需求同时进行开发和问题修复,最大程度利用研发人力。

项目稳定

随着项目逐渐复杂和稳定下来,开始暴露一些问题:每个版本的需求往往是到版本末期才合入,导致develop分支在后期cherry-pick的时候容易产生冲突,因为某个类在版本后期可能有多个人修改;同时版本末期的review时间也比较少,此时集中的多个merge request会造成review的困难;对QA来说,合码冲突中造成的Bug非常不可控,因为该需求已经验收完毕,结果合码产生了新的Bug,导致回归测试的时间变长。

各方要求:

  • RD诉求:
    开发阶段,可以自由提交代码;
    代码合并阶段,功能可以拆分review;
    验收阶段,修改可以方便同步给QA和UI;
    灰度阶段,所有代码需要走MR;

  • QA诉求:
    测试阶段,bug修复要及时且不要被其他需求影响;
    回归阶段,回归核心功能和当前版本变动点;
    发版阶段,只需要过checklist;

  • UI/DA/UE/PM诉求:
    验收阶段:方便验收,条件简单;
    回归阶段:提前发现需求冲突的问题;

综合多方述求,从产品质量和研发效率角度出发,兼顾质量稳定和业务迭代效率,保留需求的开发、测试、验收流程比较便捷,切换到多分支的管理模式。

多分支管理

一句话概括:关闭develop和master分支的push功能,保留merge request能力阶段采用拉分支,各个需求单独分支开发,测试验收通过之后再合入develop。

需求开发阶段:每个人拉出需求分支,分支内任意提交;
测试验收阶段:需求分支验收需求,必要的单独配置测试环境;
代码合并阶段:分支上的代码提merge到develop分支;
灰度阶段:只允许合入bug修复,其他延后下个版本;
提审阶段:最后一个灰度的代码进行打包提交,添加tag;

合码规范

提交类型

  • feature--需求类型,分支名以feature_需求名作为开头;
  • bugfix-具体bug,分支名以bugfix_具体bug作为开头;

冲突解决
分支在提merge request的时候会发生冲突,此时需要解决冲突:
1、以feature_test_merge为例,先拉下来feature_test_merge分支;
2、在分支feature_test_merge拉取目标分支的代码,这里以master为例:

找到冲突的文件,解决完冲突将文件标记为已解决,最后提交合并解决冲突;

如果可以,尽量使用rebase;因为rebase完之后,分支的提交会更加清晰,否则git提交记录处可能会有很多条线。

总结

不管是developer分支集中开发再cherry-pick到beta分支,还是多分支管理的模式都有各自的优缺点,只能说在项目合适的时期选用适当的方式。
代码的分支管理会随着项目迭代不断进行优化,总体来说是往两个方向发展:保证版本的质量,以及提高开发的效率。

在修改这篇文章的时候颇有感触,文章提到的项目初期真的是很早以前的事情了。
随着项目逐渐发展,分支管理已经逐渐习以为常,现在大家关注的都是组件化多仓管理和多仓合码,pipeline包大小检测、安全检测、覆盖率检测、单元测试等等。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • 吉利能力中台项目上线在即,为规范上线后的代码分支管理和版本管理,制定如下规范,请大家review,有问题...
    MoonbowQaQ阅读 2,961评论 1 5
  • 简介 现代软件开发过程中要实现高效的团队协作,需要使用代码分支管理工具实现代码的共享、追溯、回滚及维护等功能。目前...
    Lucas66阅读 8,168评论 0 5
  • 前言 从2019年上半年云音乐的客户端团队开始迁移到双周迭代后,随之而来的是我们需要重新调整代码分支的管理方法,来...
    想飞的小小小鱼阅读 1,416评论 0 0
  • 就像人心散,队伍不好带一样,代码版本多,分支也不好管 当产品开发到一定程度后,多版本同时开发,各种热修复等等问题,...
    Notech阅读 830评论 0 3
  • 代码分支管理规范 为了规范代码库分支管理和版本管理,使代码分支及版本结构清晰,方便维护,并避免由于维护造成的错误的...
    皮蛋solo粥阅读 1,489评论 0 8