仓库的分支(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 基本相似,如下图:

转Git仓库分支(Branch)和标签(Tag)的更多相关文章

  1. 主干(trunk)、分支(branch )、标记(tag)

    主干(trunk).分支(branch ).标记(tag) 用法示例 + 图解   以svn为例,git的master相当于trunk,dev分支相当于branches --------------- ...

  2. SVN 主干(trunk)、分支(branch )、标记(tag)

    主干(trunk).分支(branch ).标记(tag) 在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆. 在实现上,branch和tag,对于svn都是使用copy实现的, ...

  3. Jenkins(7)参数化构建(构建git仓库分支)

    前言 当我们的自动化项目越来越多的时候,在代码仓库会提交不同的分支来管理,在用jenkins来构建的时候,我们希望能通过参数化构建git仓库的分支. 下载安装Git Parameter插件 系统管理- ...

  4. Git远程分支代码强制回退&Tag添加

    Git指令大全:https://www.alexkras.com/getting-started-with-git/ Git提交错了,还是Master分支,哎呦喂咋整?请见下文.   [场景描述] 项 ...

  5. 主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

    以svn为例,git的master相当于trunk,dev分支相当于branches --------------------------------------------------------- ...

  6. Git仓库分支管理

    #前提条件:#一.使用命令“cd /d/BranchMgr”进入到需要进行分支管理的仓库的目录,“/d/BranchMgr”是仓库路径.如下图: ”Administrator@DESKTOP-VL6G ...

  7. git分支branch合并到主分支master

    如何使用git将分支branch合并到主干master上 对于一人独立使用git进行系统开发时,branch分支相当于版本(Version),如果每次都将新的分支branch提交到GitHub上,则会 ...

  8. 多人合作项目如何去管理git仓库

    前记:在git之前依稀记得有SVN去管理代码仓库,现在多用git去管理我们的代码:现在一般的项目大多数是多人同时开发,这样就会存在一个问题就是如何去协调开发:这也是lz当前使用git开发管理的些许经验 ...

  9. [译]如何在GitHub仓库创建一个标签tag, 并推送到远程分支?

    问: 我在GitHub上有一个仓库,我需要给他打个tag.我在shell打了tag,但是在Github上没有显示出来.我还要做其他什么么? 我在shell中使用的命令是: git tag 2.0 当我 ...

随机推荐

  1. matlab中的 ndims(a)、length(a)、size(a) 分别是什么意思?

    size(a)表示矩阵每个维度的长度比如size([1 2 3;4 5 6])等于[2 3]表示他有2行3列size([1 2 3])等于[1 3]表示他有1行3列另外size(a,n)表示矩阵a在第 ...

  2. 【Javescript】DOM(文档对象模型)

    1.定义: DOM是Document Object Model文档对象模型的缩写.是针对HTML和XML文档的一个API,通过DOM可以去改变文档. 例如:我们有一段HTML,那么如何访问第二层第一个 ...

  3. HCW 19 Team Round (ICPC format) H Houston, Are You There?(极角排序)

    题目链接:http://codeforces.com/gym/102279/problem/H 大致题意: 你在一个定点,你有个长度为R的钩子,有n个东西在其他点处,问你能勾到的东西的数量是多少? 思 ...

  4. PHP-FPM 远程代码执行漏洞(CVE-2019-11043)复现-含EXP

    搭建容器 安装golang 利用程序 https://github.com/neex/phuip-fpizdam 安装git Cobra包安装 go get -v github.com/spf13/c ...

  5. 剑指offer——62数组种数字出现的次数

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题解: 我们想到异或运算的一个性质:任何一个数字异或它自己都等于0.也就是说,如果我们从头到尾依 ...

  6. 剑指offer——570~n-1中缺失的数字

    题目:0~n-1中缺失的数字. 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内. 在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字. ...

  7. 教你如何有效防止DDos攻击?

    DDos又称分布式拒绝服务,DDos是利用大量合理的请求造成资源过载,导致服务不可用.就比如一个餐馆总共有100个座位,突然有一天某个商家恶意竞争,雇佣了200个人来到这个餐馆坐着不吃不喝,门口还排着 ...

  8. (数据科学学习手札60)用Python实现WGS84、火星坐标系、百度坐标系、web墨卡托四种坐标相互转换

    一.简介 主流被使用的地理坐标系并不统一,常用的有WGS84.GCJ02(火星坐标系).BD09(百度坐标系)以及百度地图中保存矢量信息的web墨卡托,本文利用Python编写相关类以实现4种坐标系统 ...

  9. C语言指针函数和函数指针

    #include <stdio.h> char *test(); void test1(); int main() { /********************************* ...

  10. [Err] 1701 - Cannot truncate a table referenced in a foreign key constraint

    1.SET FOREIGN_KEY_CHECKS=0; 2.DELETE FROM ACT_RE_DEPLOYMENT where 1=1; 或者 truncate table ACT_RE_DEPL ...