• 参考开发团队的分支规范进行执行

    版本管理规约

  • 分支单词中可使用驼峰命名,单词之前统一使用下划线( 禁止使用中划线等其他分隔符

  • release分支为最终功能发版分支,test集成测试分支必须在前一天由测试人员合并到release分支进行版本发布,目前由 shihu担任
  • 任何的产品包释出,发布,效能组为唯一出口,每次发布均需要构建产品包,打tag

    分支类型及命名

    master 分支

  • 简称:master

  • 简介:主干分支,用于生成环境(与saas保持一致)的发布
  • 责任人:shihu
  • 受保护:是
  • 命名规则:master
  • 命名示例:master
  • 注意事项

    • 与线上版本保持一致,每发布一次会产生一个新的版本号
    • 用于处于product-ready状态,与SAAS代码保持一致(若出现紧急发布,则与SAAS不一致)

      develop 分支

  • 简称:dev

  • 简介:研发侧用于集成测试的分支
  • 责任人:产品研发负责人
  • 受保护:是
  • 命名规则:dev
  • 命名示例:dev
  • 注意事项

    • 用于研发侧的集成测试
    • 包含master分支 + hotfix分支 + feature分支的最新内容,拥有开发的最新功能特性,功能最全,但不稳定

      feature 分支

  • 简称:feat

  • 简介:特性分支,用于新功能的开发;
  • 责任人:功能开发的主程
  • 受保护:否
  • 命名规则:feat_[functionName]
  • 命名示例:feat_multiEngine、feat_multiEngine_xx(若出现某个分支的功能是定制的,则以项目代号或者客户简称为分支后缀)
  • 注意事项

    • feature分支用于特定功能的开发,在需求评审完毕完成功能模块分解之后由研发TL基于最新的发布里程碑创建(划分原则是团队开发尽量少代码冲突)
    • feature分支在版本发布之后打完里程碑后,由分支研发的主程删除
    • 若分支是针对某个客户定制(原则上定制功能通过主干分支的开关来启用和禁用),则分支的命名规则为 feat[functionName][customerCode],如feat_sso_xx(xx银行定制单点登录)、feat_noLogin_fuli(xx地产免登)
    • 若在开发集成测试出现严重冲突必须合并dev分支时,则主程基于feat分支再创建一个分支并合并dev解决冲突,每次修改仍旧在feat分支进行,修改完后合并到新的分支,新分支命名规则为feat_[functionName]_mergedDev,命名示例如feat_mutliEngine_mergedDev、feat_noLogin_fuli_mergedDev
    • 若在测试集成环境出现严重冲突必须合并test分支时,则主程基于feat分支再创建一个分支并合并test解决冲突,每次修改人就在feat分支进行,修改完后合并到新分支,再合并到test分支,新的分支命名规则为feat_[functionName]_mergedTest,命名示例如feat_mutliEngine_mergedTest
    • release分支由test分支演变而来,若出现合并冲突,则修改feat[functionName]分支并合并到feat[functionName]_mergedTest分支,在最终合并到release分支

      test 分支

  • 简称:test

  • 简介:测试分支,会将版本迭代的特性合并到改分支进行测试侧的集成测试,最终也是基于本分支进行最终的版本发布;
  • 责任人:测试负责人
  • 受保护:否
  • 命名规则:test_3.10.x
  • 命名示例:test_3.10.x、test_3.10.x_hxb
  • 注意事项

    • 用于测试环境的集成测试
    • 测试分支出现代码合并冲突,统一由功能特性的主程负责解决
    • 测试分支在需求评审完毕后由测试TL基于最新的里程碑创建
    • 测试分支在合并到release分支后由测试人员删除
    • 对于产品出现客户定制分支的情况,则test分支增加客户代码后缀,如xx银行定制版为test_3.10.x_xx

      release 分支

  • 简称:release

  • 简介:可认为是master分支的未测试版,用于UAT环境的发布,比如某一个迭代开发完成,并发布test分支进行测试,此时test分支将被合并到release分支,再经过UAT及业务测试通过后,可合并到master分支进行发布
  • 责任人:测试负责人
  • 受保护:否
  • 命名规则:release_3.10.x
  • 命名示例:release_3.9.x、release_3.8.x、release_3.9.x_xxb
  • 注意事项

    • release分支始终存在,不做删除
    • release分支是最终上线发布的分支,原则在上线前1d必须建立并完成测试回归
    • 对于产品出现客户定制分支的情况,则release分支增加客户代码作为后缀,如新华财经定制版为release_3.10.x_xhcj

      hotfix 分支

  • 简称:hotfix

  • 简介:线上bug修复分支,从问题点的里程碑拉取,bug修复后将合并到release分支
  • 责任人:缺陷修复者
  • 受保护:否
  • 命名规则:hotfix3.7.x[issueID]
  • 命名示例:hotfix_3.7.x_186723、hotfix_3.8.x_19823_xxb
  • 注意事项

    • hotfix从小版本的最后一个里程碑拉取,如hotfix出现的版本是v3.7.10_beta2,而最新的里程碑为v3.7.20,则hotfix从v3.7.29拉取
    • hotfix由测试人员测试完毕之后合并到release分支
    • 在极端情况下,一个问题在二个版本之间可能得手动修复,如3.7.x和3.8.x在工程结构上就不一致,此时研发需要拉取二个缺陷修复分支,示例为hotfix_3.7.x_118822、hotfix_3.7.x_118822

      tmp 分支

  • 简称:tmp

  • 简介:临时分支,用于临时测试使用
  • 责任人:分支建立者
  • 受保护:否
  • 密码规则:tmp[functionName][花名缩写]
  • 命名示例:tmp_sso_mb、tmp_sso_yss
  • 注意事项

    • 临时分支用于临时做某项特殊的功能时使用,可随时删除

      里程碑命名 - tag命名规范

      使用三位版本号命名,在版本未稳定前使用beta作为后缀
  • 命名规则:vx.y.z_beta[d]

  • 命名示例:v3.8.1、v3.8.2_beta2、v3.8.3_xxb、v3.8.2_beta4_xxb
  • 注意事项

    • 里程碑由测试人员线上验证完毕之后,由研发负责人打标
    • beta为非稳定版本,是否为稳定版本由测试人员鉴定
    • 有一个例外,如果最新的大版本在过程中出现hotfix,并且需要紧急发布,则里程碑将出现二位版本号,如v3.9.1_beta1.1

      Git branch & tag 之间的区别与联系

  • tag 标签,里程碑,为了标记某种事物

  • tag 是git版本库的一个快照,指向某个commit 的指针
  • tag 在发布版本时需要用到,另外git 提供了 tag的crud一系列操作,

    tag 与 branch 的区别与各自使用场景

  • tag 对应某次commit ,为一个点,不可移动

  • branch 对应一系列的commit ,想想自己编写代码的时候是不是一连串的commit都在一个分支上,有一个HEAD指针,可以依靠HEAD指针移动。

    tag 与 branch 配合使用

  • 下例来源于网络,未实践

  • 例如 已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我突然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,作为 v4.0 发布。就可以 检出 v2.0 的代码作为一个 branch ,然后作为开发分支。

    tag 的简单使用

  • 创建标签

    • 创建tag基于本地分支的commit ,而且与分支的推送是两回事,分支已经推送到远程,但是tag并没有,如果吧tag推送到远程分支上,需要另外执行tag的推送命令

git tag tagname // 创建本地tag`<br />git push origin tagname // 推送到远程仓库`

  • 存在很多未推送的本地标签的情况下,全推送

`git push origin --tags

  • 以上是基于本地当前分支的最后的一个 commit 创建的 tag ,但是如果不想以最后一个,只想以某一个特定的提交为 tag ,也是可以的,只要你知道 commit 的 id。

未完待续。。。