版本管理之SVN实践教程:进阶篇(3):gitflow模拟:release_淼叔的博客-程序员秘密_git flow release

技术标签: # 版本管理  SVN  

这里写图片描述

release分支

Release分支主要目的是用于大型项目中各个特性分支开发完毕之后,定义了一个准备就绪到工作完成的中间阶段,一般会和项目的管理工作结合进行,比如进行发布的申请和批准,结果确认和审核,
由于不同的开发流程不仅需要考虑到技术本身,还要考虑到各个公司实际的流程规范/audit等等,以保证release能够正常进行。虽然可以在此分支上进行小量的修改,但是大规模的功能修改请尽可能地规避。

Release分支在使用时候一般遵循如下步骤:

步骤 内容 git 命令
Step 1 以develop分支为基础创建release分支 svn copy develop分支URL releases分支下的URL
Step 2 做Release准备或者小的bug对应,然后进行提交 svn commit -m “release相关信息”(没有修改可跳过)
Step 3 切换至master分支 cd ../../master
Step 4 合并Release分支内容到master分支并提交 svn merge release分支名称; svn commit
Step 5 切换至develop分支 cd ../develop(没有修改可跳过)
Step 6 合并Release分支内容到develop分支并提交 svn merge release分支名称; svn commit (没有修改可跳过)

Release分支的使用注意事项如下:

注意事项 详细说明
源分支 release分支需要以develop分支为源分支
目标分支 特性分支的合并目标分支为develop分支和master,在此分支上的诸如小的bug修正必须同时反映到develop分支和master分支,不然就会给下次发布留下隐患
分支命名 gitflow建议以release-*进行分支的命令,但是由于svn方式的不同,所有的release分支已经在releases以下,建议不要再使用重复信息。
分支删除 gitflow建议删除分支,但是根据svn的特点以及使用上的习惯,使用svn方式的话,releases即普通方式下的tags下的分支是为了记录发布历史的,因为有这个特殊的用途,所以建议不要删除
分支只读 gitflow的release分支是可写的,而传统svn的分支模型在tags下的分支一般是只读的,如果希望对其进行修改,一些做法是在此分支上svn cp生成新的分支,而使用gitflow则可以不必如此麻烦,关键是需要同步到哪里才能导致所做修改不至于丢失。
tag 在gitflow中会创建tag,而svn中不删除的那个分支实际就是tag,所以实现起来反而更加方便

模拟

场景说明:以分支开发为基础的开发,在某一特性分支开发完成之后,所做的内容已经合并回开发主线,开发主线上保存的是随时可以进行上线的内容,整体来说只是比master稍新而已,gitflow的分支模型中有两条长期分支master和develop,这两条分支之间是有一定的延迟的,而release分支就是为了建立二者同步的机制。在上篇文章中特性分支F1001开发完毕之后合并回了develop分支,release分支的场景就是将develop分支上开发的内容和F1001的内容进行发布

Step 1: 以develop分支为基础创建release分支

[root@platform gitflow-repo]# svn cp svn://192.168.163.129:3690/gitflow-repo/develop svn://192.168.163.129:3690/gitflow-repo/releases/F1001.01

Committed revision 10.
[root@platform gitflow-repo]# 

Step 2: 做Release准备或者小的bug对应,然后进行提交

[root@platform gitflow-repo]# svn update
Updating '.':
A    releases/F1001.01
A    releases/F1001.01/C1
A    releases/F1001.01/C2
A    releases/F1001.01/C3
Updated to revision 10.
[root@platform gitflow-repo]# cd releases/F1001.01/
[root@platform F1001.01]# ls
C1  C2  C3
[root@platform F1001.01]# touch C4; svn add C4; svn commit -m "add in release F1001.01"
A         C4
Adding         C4
Transmitting file data .
Committed revision 11.
[root@platform F1001.01]#

Step 3: 切换至master分支

[root@platform F1001.01]# cd ../../master
[root@platform master]#

Step 4: 合并Release分支内容到master分支并提交

[[email protected] master]# svn merge svn://192.168.163.129:3690/gitflow-repo/releases/F1001.01
--- Merging r3 through r9 into '.':
A    C2
A    C3
 U   .
--- Recording mergeinfo for merge of r3 through r9 into '.':
 G   .
--- Merging r10 through r11 into '.':
A    C4
--- Recording mergeinfo for merge of r10 through r11 into '.':
 G   .
[[email protected] master]# svn commit -m "release for F1001.01"
Sending        .
Adding         C2
Adding         C3
Adding         C4

Committed revision 12.
[[email protected] master]#

Step 5: 切换至develop分支

[root@platform master]# cd ../develop/
[root@platform develop]#

Step 6: 合并Release分支内容到develop分支并提交

[[email protected] develop]# svn merge svn://192.168.163.129:3690/gitflow-repo/releases/F1001.01
--- Merging r10 through r12 into '.':
A    C4
--- Recording mergeinfo for merge of r10 through r12 into '.':
 U   .
[[email protected] develop]# svn commit -m "release for F1001.01"
Sending        .
Adding         C4

Committed revision 13.
[[email protected] develop]# 

总结

release分支搭建了一座桥梁用于链接develop和master。最简单的release直接将内容合并到master就完成了,但是考虑到release过程中的bug对应,同时这次对应不会被后续的发布所覆盖,就会复杂一些。
在实际中,release虽然是对master的操作,但是更多考验的是develop分支管理的好坏,比如按照发布时间来看,很晚才会发布的代码很早就合并进来并不一定是很赞的事情,或者明显来说是会很痛苦的事情,每次发布你都需要将这些代码移除去,发布完毕后再合进来,这也是DevOps实践中避免的浪费,这些都需要仔细地考虑。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liumiaocn/article/details/81942188

智能推荐

紫书第九章-----动态规划初步(例题9-3 Tour UVA - 1347)_Only you, only you!的博客-程序员秘密

本文参考刘汝佳《算法竞赛入门经典》(第2版) * 动态规划的核心是状态和状态转移方程* 【递推法】/*【思考题目】(1)注意一点,去必须从左到右,回必须从右到左,那么去路确定了,返程路径随之确定。(2)题目没有给定数据范围状态确定不了,笔者无力解决此问题……【解决题目】参考刘汝佳《算法竞赛入门经典》(第2版)结合对问题的思考,我们知道从左往右走过之后,返程路径随之确定,既然...

window10安装spark_童话里做英雄529的博客-程序员秘密

1.下载并安装JDK点击下一步选择安装地址,选择完直接下一步点击完成点击下一步出现下面的界面安装完成后跳出下面的界面,点击关闭2.配置环境变量右键计算机属性→高级系统设置→高级里的环境变量→系统变量里的Path→点击编辑→点击新建→浏览→找到下载的java文件,找到2个bin文件,点击确定配置完成后的效果如下图打开cmd窗口,输入java -version...

Objective-C NSArray和NSMutableArray的详解 使用_{丸の子}的博客-程序员秘密

Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。1、NSArray 不可变数组[array count] : 数组的长度。[array objectAtIndex 0]: 传入数组脚标的id 得到数据对象。[ar...

TransactionScope异常:该伙伴事务管理器已经禁止了它对远程/网络事务的支持_该伙伴事务管理器已经禁止了它对远程/网络事务的支持。_youcaicai的博客-程序员秘密

当IIS应用服务器与SQL Server数据服务器在不同机器上时, Transaction发生异常.一、对MSDTC组件设置:步骤:1.控制面板->管理工具->组件服务->计算机->我的电脑->右键->属性2. 选择MSDTC页, 确认"使用本地协调器"3.点击下方"安全配置"按钮4. 勾选: "允许网络访问","允许远程客户端","允许入站","允许出站","不要求进行身

相机镜头选型_Artist009的博客-程序员秘密

如何根据客户需求进行镜头相机选型:1.普通镜头需要掌握的基本概念:(1)焦距:镜头主点到焦点距离(2)光圈:控制通光量的大小(3)光圈数:F=f/D     光圈数越小镜头的分辨率越高(4)景深:物体成清晰像的情况下在物体空间的移动范围  1.光圈越小,景深越大2.焦距越小,景深越大3.拍摄距离越大,景深越大(5)镜头的MTF曲线:此曲线用于评价镜头成像好坏的(6)镜头接口:C,CS,F(7)与镜...

java.sql.SQLException: Access denied for user ‘root‘@’localhost’ (using password: YES)解决方案_May21️的博客-程序员秘密

遇到的错误:java.sql.SQLException: Access denied for user ‘root’@‘localhost’ (using password: YES)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)at com.mysql.jdbc.MysqlIO.checkErr

随便推点

操作系统——文件管理,基于块的索引分配和位表_卖鱼的小白菜的博客-程序员秘密

/* 给出一个磁盘块序列:1、2、3、……、500,初始状态所有块为空的,每块的大小为2k。 选择使用位表、链式空闲区、索引和空闲块列表四种算法之一来管理空闲块。 对于基于块的索引分配执行以下步骤:随机生成2k-10k的文件50个,文件名为1.txt、2.txt、……、50.txt,按照上述算法存储到模拟磁盘中。删除奇数.txt(1.txt、3.txt、……、49.txt)文件

自我记录:Python学习之OpenCV 13 图像检测_python 图像检测自学习_违规昵称0E23的博客-程序员秘密

canny边缘检测:https://blog.csdn.net/wsp_1138886114/article/details/82935839

【转载】UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别..._leonmau的博客-程序员秘密

转载:http://blog.csdn.net/sfdev/article/details/3906243这是一堂关于UML基础知识的补习课;现在我们做项目时间都太紧了,基本上都没有做过真正的class级别的详细设计,更别提使用UML来实现规范建模了;本篇主要就以前自己一直感觉很迷糊的几种class之间的关系进行整理,让我们在真正用UML进行比如类图设计时能够更加清晰明了;以下就分别介绍这几种...

Apache atlas 的入门教程_apache atlas自定义json_清_澈的博客-程序员秘密

转自:https://blog.csdn.net/cafebar123/article/details/79944247 笔者最近参加了2场大数据技术开放活动,在技术分享的时候,发现,2场分享活动,有人不约而同的推荐了Apache atlas 组件,所以,就像介绍一下这个组件。Apache atlas 是个什么样的工具?它有哪些功能和作用?其实,在本人之前的文章中有介绍,它是一个用在had...

现场编写类似strstr/strcpy/strpbrk的函数_iteye_6233的博客-程序员秘密

1.strstrint strstr(char *string, char *substring) { if (string == NULL || substring == NULL) return -1; int lenstr = strlen(string); ...

推荐文章

热门文章

相关标签