当前位置: 首页 > news >正文

svn 分支(branch)和标签(tag)管理

版本控制的一大功能是可以隔离变化在某个开发线上,这个开发线就是分支(branch)。

分支通常用于开发新功能,而不会影响主干的开发。也就是说分支上的代码的编译错误、bug不会对主干(trunk)产生影响。然后等分支稳定之后,可以再合并到主干上。

版本管理系统的一大功能是标记特定版本,以便在任何时候都可以重建某个版本的环境,这个标记版本的动作就是打标签。

svn不需要特殊命令来打分支或者打标签。它使用的是一种“轻量copy”的方式,这种方式有些像unix的硬链接。它不会完整的拷贝仓男裤,而是创建一个内部链接来指向一个特定的版本。基于此,创建分支和标签(tag)非常快,几乎不需要额外耗费仓库的空间。

1.分支与标签(tag)的区别:

  • 创建方式相同

svn中,分支标签(tag)之间没有什么明显的差别,分支和标签的创建方式相同。

  • 使用情景不同

分支主要用于开发新功能。

标签(tag)用于保存一个静态的内容。例如一个阶段性成果。

如果用tag来存储一个动态变化的内容,那么系统会进行警告。

建议tag的名称包含版本号

branch包括 日期+功能点

  • 分支和tag的转换

当我们发布了1.0版本,这个1.0版本在tag中存储。

后来发现1.0版本需要修改。那么

  1. 我们从1.0的tag创建一个分支。

  1. 在分支上修改,直到修改完成。

  1. 然后再从该分支创建新的tag

2.分支操作

这里先让大家有个大致的里阿杰,第3部分我们来实操

为了方便的进行分支操作,创建仓库时,建议采用 trunk tag branches的结构,后期分支操作很容易。

2.1 创建新分支/标签

当我们希望开发一个新功能,那么创建一个新分支,在新分支上开发是个不错的主意,

这样,可以避免新功能开发对主干功能的影响。哇塞!这个技能不错奥!一定要有!

在上面开发已经创建了版本4,现在想在001.txt上新增一个加法功能。

在空白处,点击右键菜单 TortoiseSVN ->Branch/Tag..

左侧选择branches,并在URL中输入标签名称 (注意,正常开发新功能应当在branch上,如果选择tag,那么后期提交直接提交文件会有警告)

输入日志后,点击【ok】

下面这个提示显示分支已经创建了,但是需要你switch 才能切换到该分支

此时如果在工作区空白处点击右键 TortoiseSVN -> Revision graph,则可以看到如下,已经可以看到新的分支了

4.2切换分支

现在我们切换到刚才创建的分支 dev_add

切换分支后,你的工作区的代码就是该分支的代码了,009.txt就和trunk上不同了

注意,如果你把tag作为开发分支,则提交时,会有如下所示的警告奥,

svn认为tag从branch或者trunk中打标签才合理。

点击 commit按钮,既可完成开发

4.3 打标签

创建tag和创建分支(branch)的操作完全相同

只不过tag用于保存里程碑成果。比如0.1版本的软件资产。通常不在tag中修改

例如,实际工作中可能存在如下情景:

  1. 假设图书管理系统V1.0版本代码已经通过测试,现在我们将该成果打标签,在tag中存储(将阶段成果固化)

  1. 后来发现1.0版本有bug。我们从1.0的tag创建一个分支。

  1. 在分支上修改,直到修改完成。

  1. 然后再从该分支创建新的tag。

3.分支实操

下面让我们来完整的走个流程试一试!

3.1创建一个有 trunk/branch/tag的仓库(svn server端)

点击Repositories上点击右键菜单:Create New Repository

仓库名称建议采用英文名称( lianxi)

3.2.将本地项目导入到远程仓库

将导入的trunk地址复制到 “URL of Repository”中

点击 【ok】 按钮提交

3.3检出代码到本地

为了下面的练习效果更明显。

我们新建一个空的文件夹,在空白处点击右键“SVN checkout”将项目checkout导出到本地

输入项目的仓库路径,将代码检出

3.4.分支创建及提交

总的步骤如下,下面我们来一步一步完成

  1. 在主干上:修改009.txt的第1行追加1。 提交日志:修改009的第1行追加1

  1. 在主干上:修改009.txt的第2行追加2。 提交日志:修改009的第2行追加2

  1. 创建分支 demo_20230303_dev_add 提交日志:创建分支demo_20230303_dev_add

  1. 在主干上 修改009.txt的第3行追加3。 提交日志:修改009的第3行追加3

  1. 切换到分支(switch) demo_20230303_dev_add

  1. 在分支demo_20230303_dev_add 上 修改001.txt 删除4-6行,添加 如下的add函数,提交日志:添加add函数

int add(int x , int y)

{

return x+y;

}

  1. 在分支demo_20230303_dev_add 上 修改002.txt 末尾追加----,

提交日志: 修改002.txt 末尾追加----

  1. 将分支合并到主干,提交日志:合并分支demo_20230303_dev_add 到主干

此时主干的代码即包括了主干的修改,又包括分支的修改。

3.4.1 在主干上:修改009.txt的第1行追加1。

提交日志修改009的第1行追加1

修改的文件要提交到版本库,只需要选中改文件,点击右键菜单

3.4.2 在主干上:修改009.txt的第2行追加2。

提交日志:修改009的第2行追加2

3.4.3 创建分支 demo_20230303_dev_add

提交日志创建分支demo_20230303_dev_add

文件夹的空白处点击右键菜单 TortoiseSVN -> Branch/Tag..

点击 To path 文本框后的 【...】,选择branches,并补充分支名称后返回,填写分支日志后点击【ok】

建议分支名称包含日期和功能

完成时,系统提示当前并没有切换到新分支

3.4.4 在主干上 修改009.txt的第3行追加3。

提交日志修改009的第3行追加3

3.4.5 切换到分支(switch) demo_20230303_dev_add

在工作区点击右键菜单 TortoiseSVN -> switch

3.4.6 在分支demo_20230303_dev_add 上 修改001.txt 删除4-6行, 添加 add函数,

提交日志添加add函数

int add(int x , int y)

{

return x+y;

}

提交之后可以查看版本树 (文件夹空白处点击右键菜单 TortoiseSVN ->Revison graph

3.4.7在分支demo_20230303_dev_add 上 修改002.txt 末尾追加----

提交日志修改002.txt 末尾追加----

3.4.8 将分支合并到主干,

提交日志合并分支demo_20230303_dev_add 到主干

先切换到主干,然后执行合并

分支的日志

3.5 打标签

如果

下面我们模拟以下操作步骤:

  1. 假设图书管理系统V1.0版本代码已经通过测试,现在我们将该成果打标签1(将阶段成果固化)

  1. 图书管理系统继续开发主干分支继续修改

  1. 从标签1创建分支

当我们发布了1.0版本,这个1.0版本在tag中存储。

后来发现1.0版本需要修改。那么

  1. 我们从1.0的tag创建一个分支。

  1. 在分支上修改,直到修改完成。

  1. 然后再从该分支创建新的tag

3.6 注意 tag一般只保存阶段成果,不用来保存变化的内容

如果你把tag作为开发分支,则提交时,会有如下所示的警告奥,

svn认为tag从branch或者trunk中打标签才合理。

点击 commit按钮,既可完成开发

相关文章:

svn 分支(branch)和标签(tag)管理

版本控制的一大功能是可以隔离变化在某个开发线上,这个开发线就是分支(branch)。分支通常用于开发新功能,而不会影响主干的开发。也就是说分支上的代码的编译错误、bug不会对主干(trunk)产生影响。然后等分…...

@Transactional详解

一、事务的概念 百度百科: 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执 行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL&#x…...

机器学习:Transformer

Transformer sequence-to-sequence(seq2seq) 很大语音没有文本,7000种中超半数没有文字。 遇到的问题: 遇到问题时候可以先不管它,先出一个baseline看看效果,后续再进行提升。 tts: 文本转语音,语音合成…...

pytorch-模型构建,参数访问,模型存取API接口,对比学习

多层感知机的简洁实现pytorch-多层感知机,最简单的深度学习模型,将非线性激活函数引入到模型中。_羞儿的博客-CSDN博客中含单隐藏层的多层感知机的实现方法。首先构造Sequential实例,然后依次添加两个全连接层。其中第一层的输出大小为256&am…...

javaEE 初阶 — 数据链路层中的以太网数据帧

文章目录以太网帧格式1. MAC 地址2. MAC 地址是如何与 IP 地址相互配合的3. 以太网帧格式中的类型MTU(了解)以太网帧格式 数据链路层主要考虑的是相邻的两个结点之间的传输。 这里最知名的协议就是 以太网。 一个以太网数据帧有三个部分组成。帧头载荷…...

泼辣修图Polarr5.11.4 版,让你的创意无限延伸

泼辣修图是一款非常实用的图片处理软件,它不仅拥有丰富的图片处理功能,而且还能够轻松地实现自定义操作。泼辣修图的操作界面非常简洁,功能也非常丰富,使用起来非常方便快捷。 泼辣修图拥有非常丰富的图片处理功能,包括…...

leetcode打卡-深度优先遍历和广度优先遍历

200.岛屿数量 leetcode题目链接:https://leetcode.cn/problems/number-of-islands leetcode AC记录: 思路:深度优先遍历,从0,0开始遍历数组,使用boolean类型数组used记录是否被访问过,进行一…...

【0177】Linux中POSIX信号量实现机制

文章目录 1. 信号量概念1.1 信号量类比1.2 重要的观察1.3 信号量分类2. POSIX与System V信号量3. 信号量API4. 代码演示5. 信号量内核实现1. 信号量概念 在计算机科学中,信号量(semaphores )是一种变量或抽象数据类型,用于控制多个进程对公共资源的访问,并避免并发系统(如…...

跳表--C++实现

目录 作者有话说 为何要学习跳表?为了快,为了更快,为了折磨自己..... 跳表作用场景 1.不少公司自己会设计哈希表,如果解决哈希冲突是不可避免的事情。通常情况下会使用链址,很好理解,当有冲突产生时&#…...

c#:System.Text.Json 的使用一

环境: .net 6.0vs2022 参考: 从 Newtonsoft.Json 迁移到 System.Text.Json System.Text.Json 常规用法 一、写入时的控制 1.1 非ascii码转换 直接看代码: var str System.Text.Json.JsonSerializer.Serialize(new Model { Id 1, Name …...

kaggle数据集下载当中所遇到的问题

kaggle数据集下载当中所遇到的问题报错分析pip install kagglethe SSL module is not available解决方法pip的版本升级解决办法下载kaggle包kaggle数据集下载问题解决参考内容报错分析 今天在尝试使用pip install kaggle的方法去下载我需要的数据集的时候遇到了一些报错的问题…...

TEX:高阶用法

文章目录定制LATEX记数器创建记数器改变记数器的值显示记数器的值长度橡皮长度用户定义命令用户定义的环境标题定制正文中标题设置使用titlesec宏包设置标题格式目录中标题设置LATEX 2ε\varepsilonε程序设计语言命令的层次文件识别上载其他类和宏包输入文件检测文件选项的处理…...

UML 类图

车的类图结构为<>&#xff0c;表示车是一个抽象类&#xff1b; 它有两个继承类&#xff1a;小汽车和自行车&#xff1b;它们之间的关系为实现关系&#xff0c;使用带空心箭头的虚线表示&#xff1b; 小汽车为与SUV之间也是继承关系&#xff0c;它们之间的关系为泛化关系…...

项目实战典型案例1——redis只管存不管删除 让失效时间删除的问题

redis只管存不管删除 让失效时间删除的问题一&#xff1a;背景介绍二&#xff1a;思路&方案三&#xff1a;代码模拟1.错误示范通过班级id查询课程名称执行结果通过班级id修改课程名称&#xff08;并没有删除对应缓存&#xff09;执行结果2.正确示范在错误示范的更新接口上添…...

@RequestParam和@PathVariable的用法与区别

PathVariable PathVariable 映射 URL 绑定的占位符带占位符的 URL 是 Spring3.0 新增的功能&#xff0c;该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义通过 PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中&#xff1a;URL 中的 {xxx} 占…...

【大数据 AI 人工智能】数据科学家必学的 9 个核心机器学习算法

如今,机器学习正改变着我们的世界。借助机器学习(ML),谷歌在为我们推荐搜索结果,奈飞在为我们推荐观看影片,脸书在为我们推荐可能认识的朋友。 机器学习从未像在今天这样重要。但与此同时,机器学习这一领域也充斥着各种术语,晦涩难懂,各种机器学习的算法每年层出不穷…...

IronPDF for .NET 2023.2.4 Crack

适用于 .NET 2023.2.4 的 IronPDF 添加对增量 PDF 保存的支持。 2023 年 3 月 2 日 - 10:23新版本 特征 添加了对 IronPdfEngine Docker 的支持。 添加了对增量 PDF 保存的支持。 重新设计了 PDF 签名和签名。 删除了 iTextSharp 依赖项。 在文本页眉/页脚中添加了 DrawDivider…...

3.4-前端的10个问题

01、null和undefined undefined是全局对象的一个属性&#xff0c;当一个变量没有赋值或者访问一个对象不存在的属性&#xff0c;这时候都是undefined。 null&#xff1a;表示是一个空对象。在需要释放一个对象的时候&#xff0c;直接赋值为null即可。 02、箭头函数 箭头函数…...

开发手册——一、编程规约_9.其他

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】在使用正则表达式时&#xff0c;利用好其预编译功能&#xff0c;可以有效加快正则匹配速度。 说明&#xff1a;不要在方法…...

23.3.4打卡 AtCoder Beginner Contest 291(Sponsored by TOYOTA SYSTEMS)A~E

F题题面都看不懂嘞!开摆! 没找到合适的markdown, 截图网页翻译了我真是天才 比赛链接: https://atcoder.jp/contests/abc291 A题 题意 给出一个字符串, 找到第一个大写字母的下标 简单题就不多说了, 直接放代码 代码 void solve() {cin>>str;nstr.size();str"…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...