Git 代码分支管理

作者:京东科技 周新智

一、引言

近日,IoT 研发团队加入了不少新同学,对 git 分支的命名和管理方式有些许的模糊,分支的命名规范以及管理方式对项目的版本发布至关重要,为了解决实际开发过程中版本发布时代码管理混乱、冲突等比较头疼的问题,我们将在文中阐述如何更好的管理代码分支。

二、总览

从上图可以看到主要包含下面几个分支:

• master: 主分支,也称为线上分支,主要用来版本发布。

• dev:日常开发分支,该分支正常保存了开发的最新代码。

• release:release 分支可以认为是 master 分支的测试版。比如说某个新增功能开发完成、线上问题紧急修复完成,那么就将 feature/hotfix 分支合并到 release 分支,到了发布日期就合并到 master 分支,进行版本发布。

• feature:具体的功能开发分支。

• hotfix:线上 bug 修复分支。

三、主分支

主分支包括Master Branch、Release Branch、Dev Branch 三个分支:

1、Master Branch

用来进行版本发布,也就是当前线上运行的代码分支

2、Release Branch

Release Branch 在我看来就是 Pre-Master。Release Branch 从 Master Branch 检出,最终会合并到Master Branch,合并后 Master Branch上就是可以发布的代码了。

所有新增功能的开发分支都是从 Dev Branch 检出作为本地分支,以 feature-功能名-姓名首字母简拼,当功能开发完毕的时候,将 feature Branch 合并到 Dev Branch,在测试或预生产环境进行部署,测试通过后,再将 feature Branch 合并到 Release Branch。

如果出现线上问题需要紧急修复,则从 Release Branch 检出作为本地分支,以 hotfix-功能名-姓名首字母简拼, 当问题修复完毕的时候,将hotfix Branch合并到 Dev Branch,在测试环境进行部署,测试通过后,再将 hotfix Branch 合并到 Release Branch,在预发环境再次验证。

待所有的测试和准备工作做完之后,我们就可以将 release 分支合并到 master 分支上,并择机进行线上发布。

3、Dev Branch

dev 就是我们的日常开发分支。

四、辅助分支

1、Feature分支

feature 分支用来开发具体的功能,一般 fork 自 Dev 分支,以 feature-功能名-姓名首字母简拼 进行命名,最终合并到 Dev 、Release分支。比如我们要在下一个版本增加功能1、功能2、功能3。那么我们就可以起三个feature 分支:feature-1-zxz,feature-2-qxh,feature-3-sq。(feature 分支命名最好能够自解释,1、2、3 这并不是一种好的命名)随着我们开发,功能1和功能2都被完成了,而功能3因为某些原因完成不了,那么最终 feature-1-zxz 和 feature-2-qxh 分支将被合并到 Dev 分支,而 feature-3-sq 分支将延期继续进行本地开发工作,功能1和功能2测试完没有问题后,将 feature1 和 feature2 分支将被合并到 Release 分支,最终将 Release 分支合并到 Master 分支。

2、Hotfix 分支

顾名思义,hotfix 分支用来修复线上 bug。当线上代码出现 bug 时,我们基于 Release 分支开一个 hotfix 分支,以 hotfix-功能名-姓名首字母简拼(例如:hotfix-model-base-zxz)修复 bug 之后再将 hotfix 分支合并到 Release 分支,同时 Dev 分支作为最新最全的代码分支,hotfix 分支也需要合并到 Dev 分支上去,同时在不同分支对应的不同环境进行bug回归验证,最终将 Release 分支合并到 Master 分支,进行线上发布即可。

五、注意事项

1、 Feature 分支、Hotfix 分支合并到 Dev 分支,测试通过后,需再合并到 Release 分支,这时候就要求代码合并时需清楚的知道此代码是否已经经过验证。

2、 Dev、Release、Master分支的同步

Release 分支合并到 Master 分支后,若Dev分支无正在测试的功能,建议定时将 Dev、Release、Master 分支进行代码同步。

通过以上分支管理,我们就可以轻松做到:团队成员之间功能并行开发、功能选择性发布、版本发布、线上问题紧急功能开发、紧急问题修复等。

本文转载于网络 如有侵权请联系删除

相关文章

  • DNS地址获取

    接口地址:点击进入{ "ServerName":"阿里DNS", "DNS1":"223.5.5.5", "DNS2":"223.6.6.6" }, { "ServerName":"腾讯DNS", "DNS1":"119.29.29.29", "DNS2":"182.254.116.116" }, { "ServerName":"百度DNS", "DNS1":"180.76.76.76", "DNS2":"" }, { "ServerName":"DNS派", "DNS1":"101.226.4.6", "DNS2":"21

  • 自动化Debias框架,一键去除推荐系统所有Bias。

    作者:一元,四品炼丹师AutoDebias:LearningtoDebiasforRecommendation01简介本文的代码已经开源,关注我们的号后台回复autodebias即可获得对应代码。推荐系统依赖于用户行为数据,如评分和点击来建立个性化模型。然而,所收集的数据是观察性的而不是实验性的,导致了数据中的各种偏差,这些偏差显著地影响了学习模型。大多数现有的推荐debias的工作,如反向inversepropensityscoring和imputation方法,侧重于一个或两个具体的Bias,缺乏通用性。针对这一研究空白,我们首先从风险差异的角度分析了Bias的来源,风险差异代表了预期经验风险和真实风险之间的差异。值得注意的是,我们通过指定通用框架的一些参数,得到一个通用学习框架,很好地总结了大多数现有的debiasing策略。但是:训练数据缺乏关于数据是如何有偏的以及无偏数据是什么样子的重要信号。本文提出利用另一个(小的)统一数据集通过元学习解决双层优化问题来优化参数的AotoDebias方法。通过理论分析,我们得到了AutoDebias的推广界,并证明了它能够获得合适的debi

  • 【深度知识】RabbitMQ的四种集群架构

    主备模式实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模式非常的好且简单。主备模式也称为Warren模式主备模式:主节点提供读写,从节点不提供读写服务,只是负责提供备份服务,备份节点的主要功能是在主节点宕机时,完成自动切换从-->主 主从模式:主节点提供读写,从节点只读 主备模式:所谓rabbitmq另外一种模式就是warren(兔子窝),就是一个主/备方案(主节点如果挂了,从节点提供服务而已,和activemq利用zookeeper做主/备一样)imageHaProxy配置:listenrabbitmq_cluster bind0.0.0.0:5672 modetcp#配置TCP模式 balanceroundrobin#简单的轮询 serverbhz76192.168.11.12:5672checkinter5000rise2fall3#主节点 serverbhz77192.168.11.13:5672backupcheckinter5000rise2fall3#备用节点复制备注:rabbitmq集群节点配置#inter每隔5秒对mq集群做健康检查,2次

  • 2020年第一届辽宁省大学生程序设计竞赛

    题目列表A题意描述思路AC代码B题意描述思路AC代码C题意描述思路AC代码F题意描述思路AC代码G题意描述思路AC代码I题意描述思路AC代码J题意描述思路AC代码K题意描述思路AC代码A题意描述思路可以使用一个pairpairpair数组来保存<int,stringint,stringint,string>对,排序后按题意模拟即可。注意输出队员姓名的顺序是按照排名从大到小排列,并且要开333倍nnn的空间。AC代码#include<bits/stdc++.h> #definexfirst #defineysecond #definePBpush_back #definemst(x,a)memset(x,a,sizeof(x)) #defineall(a)begin(a),end(a) #definerep(x,l,u)for(llx=l;x<u;x++) #definerrep(x,l,u)for(llx=l;x>=u;x--) #definesz(x)x.size() #defineIOSios::sync_with_stdio(false);ci

  • php进程(线程)通信基础之System V共享内存简单实例分析

    本文实例讲述了php进程(线程)通信基础之SystemV共享内存。分享给大家供大家参考,具体如下:PHP默认情况没有开启功能,要支持该功能在编译PHP的时候要加入下面几个选项SystemV消息,–enable-sysvmsgSystemV信号量支持,–enable-sysvsemSystemV共享内存支持,–enable-sysvshmPHP还挺shmop共享内存,在编译的时候开启–enable-shmopSystemV共享内存的相关函数:1:创建信号量唯一标识符$ftok=ftok(__FILE__,'a');复制2:创建共享内存端$id=shm_attach($ftok,1000,0666)复制3:断开与共享内存段的连接shm_detach($id)复制4:获取一个变量值$val=shm_get_var($id,$key)复制5:检测变量是否存在shm_has_var($id,$key)复制6:添加一个值到共享内存里shm_put_var($id,$key,$val)复制7:从共享内存中删除一个变量shm_remove_var($id,$key)复制8:从系统中

  • 实战:爬取猫眼电影TOP100

    实战:爬取猫眼电影TOP100爬取时间:2020-05-21 爬取难度:★☆☆☆☆☆ 请求链接:https://maoyan.com/board/4 爬取目标:猫眼TOP100的电影名称、排名、主演、上映时间、评分、封面图地址,数据保存为CSV文件 涉及知识:请求库requests、解析库lxml、Xpath语法、CSV文件储存importrequests fromlxmlimportetree importcsv #头部伪装 headers={ 'User-Agent':'Mozilla/5.0(windowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.142Safari/537.36' } #爬取当前页面 defindex_page(number): url='https://maoyan.com/board/4?offset=%s'%number response=requests.get(url=url,headers=hea

  • 【PAT乙级】写出这个数

    版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/weixin_42449444/article/details/84867564题目描述:读入一个正整数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于​​。输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789复制输出样例:yisanwu复制解题思路:首先看完题目之后,我先自定义了一个transfer()函数用来将数字转换为拼音。然后根据题目意思来吧。我是用string来存放输入的数字的,然后用for循环将每一个数字取出来累加,算出累加和的个位十位百位分别是多少,然后调用自定义函数来完成转换。值得一提的是,我第一遍写的那段代码有一个测试用例无法通过,因为当sum的十位数是0是会无法输出'ling',比如99999999999

  • kube-apiserver审计日志记录和采集

    阅读本文大约需要8分钟。Kubernetes审计功能提供了与安全相关的按时间顺序排列的记录集,记录单个用户、管理员或系统其他组件影响系统的活动顺序。它能帮助集群管理员处理以下问题:发生了什么?什么时候发生的?谁触发的?为什么发生?在哪观察到的?它从哪触发的?它将产生什么后果?Kube-apiserver执行审计。每个执行阶段的每个请求都会生成一个事件,然后根据特定策略对事件进行预处理并写入后端。每个请求都可以用相关的“stage”记录。已知的stage有:RequestReceived-事件的stage将在审计处理器接收到请求后,并且在委托给其余处理器之前生成。ResponseStarted-在响应消息的头部发送后,但是响应消息体发送前。这个stage仅为长时间运行的请求生成(例如watch)。ResponseComplete-当响应消息体完成并且没有更多数据需要传输的时候。Panic-当panic发生时生成。 Note:审计日志记录功能会增加APIserver的内存消耗,因为需要为每个请求存储审计所需的某些上下文。此外,内存消耗取决于审计日志记录的配置。审计策略审计政策定义了关于应记

  • 如何确保应用程序在公共云中的可用性

    采用云计算的注意事项是一种很好的建议。云计算服务提供商(CSP)都会承诺在其基础设施中提供“高可用性”,其服务水平协议(SLA)通常提供95%至99.99%的正常运行时间,而每月服务费退款率将达到10%到50%不等。但通常没有达到这样的门槛,正如IT的许多方面一样,重要的在于细节。而采用正确的方法,在AmazonWebServices、谷歌云平台和微软Azure公共云和混合云环境中可以实现5个9的高可用性(HA)。这需要了解服务等级协议(SLA)中的限制,以及创建高可用配置的选项。高可用性限制大多数云计算服务提供商都提供具有99.99%正常运行时间保证的服务等级协议(SLA),而跨越云计算服务提供商(CSP)区域和/或区域的冗余配置增加了企业获得满意可用性的信心。但是这种安排存在一些严重问题,因为服务等级协议(SLA)中“停机时间”和“不可用”是导致应用程序失败的原因。不计入停机的潜在原因包括客户的软件,任何第三方软件或技术,计划的硬件和软件维护,以及个别实例或卷的某些问题,这些问题不能归因于某些不可用的情况。还排除了错误的输入或指令,或在需要时缺乏行动,这似乎涵盖了“人为错误”可能的

  • 聊聊spring cloud gateway的PrefixPath及StripPrefix功能

    序本文主要研究一下springcloudgateway的PrefixPath及StripPrefix功能PrefixPathGatewayFilterFactoryspring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/filter/factory/PrefixPathGatewayFilterFactory.javapublicclassPrefixPathGatewayFilterFactoryextendsAbstractGatewayFilterFactory<PrefixPathGatewayFilterFactory.Config>{ privatestaticfinalLoglog=LogFactory.getLog(PrefixPathGatewayFilterFactory.class); publicstaticfinalStringPREFIX_KEY="prefix"; publicPrefixPathGateway

  • Linux达人养成3--使用远程工具操作Linux

    一起努力吧,老铁 今天,我们讲讲用远程工具来管理我们的Linux,以及一些常用的网络命令。如果没还没学过基本的Linux命令以及网络配置,可以看我前两篇文章哦。 Linux大人养成计划1---基础命令总结 Linux达人养成计划2---虚拟机下的网络配置 要点:用远程工具管理Linux。一些常用的网络管理命令1.用远程工具管理Linux 为什么要用远程工具管理呢?(1).假如你是想在虚拟机环境下学习Linux的话,Linux是一个纯字符界面。屏幕黑乎乎一片,而且还不支持输入中文。当然除非你装了第三方插件。所以我们用远程工具来操作我们的Linux,可以方便我们更好的学习,例如屏幕调色,设置字体大小、支持中文显示等。(2).Linux一般都是用来充当服务器用的,总不能把服务器时刻带在身边吧。有时人在外需要操作了服务器了,就可以使用远程工具来操作了。当然远程工具管理服务器的用处可大了,我只是随便列举一下,毕竟我们的重点是学习如何用远程工具操作我们的Linux.远程管理工具有很多种,我们今天就讲讲比较简单的一种。用XShell来操作、学习Linux。如果没有这个软件,可以在我的公众号后台回复&

  • 【Python 第5课】变量

    先告诉一直用在线编辑器的同学一个不幸的消息:昨天有同学反馈了之后我才发现,在线编辑器没办法完全模拟控制台下输入输出的操作。所以,你可以通过它来学习和实验,但是想跟着我一起完成那个弱智小游戏,还是必须给你的电脑装上python。#========变量========#昨天说到,需要让程序理解我们输入的东西。那首先,就需要有东西把我们输入的内容记录下来,好为接下来的操作做准备。Python之神说,要有变量!于是就有了变量。变量,望文生义,就是变化的量。python里创建一个变量的方法很简单,给它起个名字,然后给它一个值。举起几个栗子:name='Crossin'myVar=123price=5.99visible=True“=”的作用是把右边的值赋予给左边的变量。这里说一下另外一个概念,叫做“数据类型”,上面4颗栗子分别代表了python中较常见的四种基本类型:字符串-表示一串字符,需要用''或""引起来整数浮点数-就是小数bool(布尔)-这个比较特殊,是用来表示逻辑“是”“非”的一种类型,它只有两个值,True和False。(

  • 腾讯云账号相关认证方式概述

    如果您的腾讯云账号及云资源归属于企业名下,或者您想参加腾讯云官网企业类运营活动,则需要您进行企业实名认证。企业实名认证支持如下认证方式: 认证方式 认证时长 描述 微信公众平台认证 即时完成 已注册微信公众号且经过微信实名认证的企业,使用此方式,即可立即认证。 企业法人微信扫码认证 即时完成 使用企业法人的个人微信扫码认证,法人微信扫码授权后,即可完成认证。 企业法人人脸识别认证 即时完成 使用企业法人的个人微信扫码进行人脸识别,人脸识别通过后,即可完成认证。 腾讯云充值认证 1个工作日 通过企业银行账户充值一笔系统随机生成的指定金额且充值总金额少于1元的小额验证金(将充入余额),腾讯云收到充值后,即可完成认证。 企业对公打款认证 1-3个工作日 输入企业银行账号信息,待腾讯云打款成功后,回填打款金额完成认证。 认证流程 注意事项 同1个企业身份信息(企业名称/营业执照)默认支持实名认证10个腾讯云账号,如果认证账号数量满足不了业务诉求,请联系您的客户经理进行处理。 港澳台企业用户和境外用户请前往国际站进行认证。 若需申请ICP备案,请确保实名认证

  • WPF开发快速入门【7】WPF的拖放功能(Drag and Drop)

    概述 本文描述WPF的拖放功能(DragandDrop)。 拖放功能涉及到两个功能,一个就是拖,一个是放。拖放可以发生在两个控件之间,也可以在一个控件自己内部拖放。假设界面上有两个控件,一个TreeView,一个ListView,那么可能发生的拖动有以下几种情况: 1、TreeView->ListView 2、ListView -> TreeView  3、TreeView-> TreeView  4、ListView ->ListView 对于拖的控件需要在鼠标移动事件中检测左键按下并启动拖动操作;对于放的控件需要处理Drop等事件来接收数据。如果是在控件内部拖动,则以上两个动作都要处理。 为简便起见,本文就以ListView拖动到TreeView为例进行讲解。    拖 在拖与放的控件之间一定会有数据传递,我们可以设计一个类型来进行数据传输,由于ListView本身就是绑定到一个对象列表的,我就把选中的对象字节拿来传递了,没有额外定义类型。 publicclassListVie

  • 毕业诗

      毕业诗   今天,是我最后一次站在这里,     和老师、小朋友在一起,我是多么欢喜。     再过几天,我就要进小学,做个一年级小学生,     坐在明亮的教室里,读书写字多么神气。     亲爱的老师、阿姨,我有很多话想说给您:     三年前我第一次到这里,玩具仍满地,还要发脾气。     今天,站在这里的还是我自己,     脸上再也没有泥,自己吃饭刷牙齿,     还会唱歌、跳舞、画画、讲故事,     懂得了很多道理。     亲爱的老师、阿姨,我从心里感谢您!     再见吧,老师!再见吧,阿姨!     以后我一定来看您,向您报告我的学习成绩!     今天,是我最后一次站在这里,     和老师、小朋友在一起,我是多么欢喜。     再过几天,我

  • 博世ecu软件手册架构

    注:原文转自51数据库 智能汽车的体系架构 通过车载传感系统,智能汽车本身具备主动的环境感知能力,此外,它也是智能交通系统(ITS)的核心组成部分,是车联网体系的一个结点,通过车载信息终端实现与人、车、路、互联网等之间的无线通讯和信息交换。 因此,智能汽车集中运用了计算机、现代传感、信息融合、模式识别、通讯及自动控制等技术,它是一个集环境感知、规划决策、多等级驾驶辅助等于一体的高新技术综合体,拥有相互依存的价值链、技术链和产业链。 车联网、智能交通系统(ITS)为智能汽车提供了智能化的基础设施、道路及网络环境,随着汽车智能化层次的提高,反过来也要求车联网、智能交通系统同步发展。 智能汽车的产业链可以描述如下:1)车联网的产业链,包括上游的元器件和芯片生产企业,中游的汽车厂商、设备厂商和软件平台开发商,以及下游的系统集成商、通信服务商、平台运营商和内容提供商等。 2)先进传感器厂商:开发和供应先进的机器视觉技术,包括激光测距系统、红外摄像,以及雷达(厘米波、毫米波、超声波)等。 3)汽车电子供应商:能够提供智能驾驶技术研发和集成供应的汽车电子供应商,如博世、德尔福、电装等。 求Bosch

  • Java HttpURLConnection发送post请求示例

    publicstaticMap<String,Object>invokeCapp(StringurlStr,Map<String,Object>params)throwsException{ Mapmap=newHashMap(); //post参数 StringBuilderpostData=newStringBuilder(); for(Map.Entry<String,Object>param:params.entrySet()){ if(postData.length()!=0){ postData.append('&'); } postData.append(URLEncoder.encode(param.getKey(),"UTF-8")); postData.append('='); postData.append(URLEncoder.encode(String.valueOf(param.getValue()),"UTF-8")); } logger.info(postData.toString()); byte[]pos

  • NFS挂载Android文件系统

    NFS挂载Android文件系统 [日期:2012-02-14] 来源:Linux社区 作者:cjok376240497 [字体:大 中 小]     1.安装NFS服务 $sudoapt-getinstallnfs-kernel-serverportmap $sudomkdir/nfsboot $sudovim/etc/exports  /*(rw,no_root_squash,sync) 然后重启NFS服务 $sudo/etc/init.d/nfs-kernel-serverrestart   2.配置内核NFS选项 $makemenuconfig 修改默认配置,取消”generalsetup”->”initialRAMfilesystemandRAMdisk(initramfs/initrd)support” 然后选上”filesystems”->”Networkfilesystems”   3.制作Android 文件系统(android源码包已经编译完成)

  • Python爬虫利器三之Xpath语法与lxml库的用法

    前言 前面我们介绍了BeautifulSoup的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如lxml,使用的是Xpath语法,同样是效率比较高的解析方法。如果大家对BeautifulSoup使用不太习惯的话,可以尝试下Xpath。 参考来源 lxml用法源自lxmlpython官方文档,更多内容请直接参阅官方文档,本文对其进行翻译与整理。 lxml XPath语法参考w3school w3school 安装  pypi下载地址:https://pypi.python.org/pypi/lxml/3.4.2#downloads   1 pipinstalllxml 利用pip安装即可 XPath语法 XPath是一门在XML文档中查找信息的语言。XPath可用来在XML文档中对元素和属性进行遍历。XPath是W3CXSLT标准的主要元素,并且XQuery和XPointer都构建于XPath表达之上。 节点关系 (1)父(Parent) 每个元素以及属性都有一个父。 在下面的例子中,book元素是title、au

  • 给jdk写注释系列之jdk1.6容器(11)-Queue之ArrayDeque源码解析

    前面讲了Stack是一种先进后出的数据结构:栈,那么对应的Queue是一种先进先出(FirstInFirstOut)的数据结构:队列。    对比一下Stack,Queue是一种先进先出的容器,它有两个口,从一个口放入元素,从另一个口获取元素。如果把栈比作一个木桶,那么队列就是一个管道。   是不是很容易理解,因为队列有两个口,一个负责入队另一个负责出队,所以会有先进先出的效果。      当然我们说ArrayDeque是一个双向队列,队列的两个口都可以入队和出队操作。再进一步说,其实ArrayDeque可以说成是一个双向循环队列,是不是和链表的分类很像,为什么这么说呢,我们下面会具体分析。   1.定义    1publicclassArrayDeque<E>extendsAbstractCollection<E> 2implementsDeque<E>,Cloneable,Serializable复制   从Array

  • docker配置搭建elasticsearch集群

    一、es集群的配置搭建 准备三台服务器:192.168.81.130、192.168.81.131、192.168.81.132 1、修改每台主机的内核参数vm.max_map_count 编辑/etc/sysctl.conf vm.max_map_count=655350复制 然后执行sysctl-p 2、将es镜像pull下来,本文采用elasticsearch:7.1.1     3、编辑docker-compose.yaml文件 version:'3' services: elasticsearch:#服务名称 image:elasticsearch:7.1.1#使用的镜像 container_name:elasticsearch#容器名称 restart:always#失败自动重启策略 environment: -node.name=node-130#节点名称,集群模式下每个节点名称唯一 -network.publish_host=192.168.81.130#用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP -

相关推荐

推荐阅读