• 转Git仓库分支(Branch)和标签(Tag)


    仓库的分支(Branch)规范,影响到每个团队的工作流的一致性;标签(Tag)便于开发团队、测
    试团队和其他团队识别每个项目的版本,特别是在协同处理线上问题的时候,大家可以非常清楚
    地知道线上运行版本和代码库的对应关系。因此我们在制作的时候,主要考虑几个因素:

    • 一是要有一定的规则,方便持续集成CI(自动化构建、测试、分布等)
    • 二是要有一定的自由度,以适应不同团队的内部协作灵活性
    • 要清晰规整,不要参差不齐难以识别

    基于我们当前团队的协作能力和提交代码的质量水平,并考虑方便持续集成CI(自动化构建、
    测试、发布),我们约定下列常驻Branch:

    • develop 分支:顾名思义即持续开发的分支,我们希望每个开发组都在这个分支上保
      持线性的持续小步迭代,正常的CodeReview WorkFlow和开发级的自动CI也在这里进行。
      当开发完一个迭代(Sprint),开发小组有信心转测时,就将代码合并到 release 分支,
      并要求打一个alpha级的Tag(如5.2.0-alpha)
    • release 分支:顾名思义即用于发布过程的分支,包括开发转测(实际上我们认为这里的测试集成测试)、测试和BugFix以及发布上线的过程,当发布成功时要打一个发布beta Tag(如
      5.2.1-beta),并将代码合并到 master 分支
    • master 分支:即有质量保证的、可安全运行的分支,禁止直接代码提交,避免被污染,仅用
      于代码合并和归集,在这个分支上的代码应该永远是可用的、稳定的。当需要拉一个特别的开发分时,
      应该基于 master

    当需要fix线上的一个问题是,应该基于上线时的那个beta Tag做hotfix。当出现线上Bug需要hotfix时,我们需要在上次上线的Tag处拉一个临时的 hotfix 分支进行
    修正,或者在未被其他开发迭代污染的release分支上直接hotfix上线并合并到master和
    develop,然后打一个新的Tag(如5.2.2-beta)

    这个分支体系是我们期望长期持续迭代的分支规划,其它临时分支的删除、创建、命名,都由团队自己
    决定,保持一定的灵活性。但每个团队都应该努力避免对上述常规情况造成破坏的情况发生,如果有特
    殊情况(如有两个并行的开发分支同步进行),需要由各组Leader和QA团队协商提供临时方案,这会
    影响到团队协同中的转测、CI基准分支等。

    关于打 Tag 的规则

    鼓励开发和QA团队共同对勤于打Tag,这便于真正的版本管理,避免有rollback需要或者需要查看和
    对比历史版本的时候的混乱和低效局面。但同时也要求一定的规范性,让人一看便知。

    Tag格式为: MajorVersion.MinorVersion.FixVersion-TypeLabel,其中TypeLabel
    alphabetadevel。具体参见下图举例,其中devel是留给开发过程中
    使用的。

    分工上,开发团队负责打 tag-alpha,测试团队负责打 tag-beta

    但是,自己决定并不意味着胡乱命名,大家仍然要以 语义明(白)(准)确 的原则
    来管理自己的分支和标签名,因为所有这些都是为了提高协作效率。

    这是一个参考示意图:
    这里写图片描述

    事实上,上图和常用的 Git 分支实践是比较相似的,只是为了方便自动化工作,我们将 release 分支常驻并配合 tag 管理了,其他工作的 workflow 基本相似,如下图:

    这里写图片描述

  • 相关阅读:
    剑指offer(14)链表中倒数第K个节点
    剑指offer(13)调整数组顺序使奇数位于偶数前面
    跨域资源共享CORS
    同源政策
    剑指offer(12)数值的整数次方
    剑指offer(11)二进制中1的个数
    面试金典——交点
    LeetCode——简化路径
    LeetCode——跳跃游戏 I-II
    LeetCode——最大矩形
  • 原文地址:https://www.cnblogs.com/weiqingfeng/p/9525663.html
Copyright © 2020-2023  润新知