首页 > 其他分享 >【转】SVN branch和tag相关用法

【转】SVN branch和tag相关用法

时间:2023-10-09 14:48:46浏览次数:49  
标签:SVN 创建 修改 add tag branch 日志 分支

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

https://blog.csdn.net/caohongxing/article/details/129311157
版本控制的一大功能是可以隔离变化在某个开发线上,这个开发线就是分支(branch)。

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

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

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

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

使用情景不同

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

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

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

建议tag的名称包含版本号

branch包括 日期+功能点

分支和tag的转换

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

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

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

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

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

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

为了方便的进行分支操作,创建仓库时,建议采用 trunk tag branches的结构,后期分支操作很容易。
image
2.1 创建新分支/标签
当我们希望开发一个新功能,那么创建一个新分支,在新分支上开发是个不错的主意,

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

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

在空白处,点击右键菜单 TortoiseSVN ->Branch/Tag..
image
左侧选择branches,并在URL中输入标签名称 (注意,正常开发新功能应当在branch上,如果选择tag,那么后期提交直接提交文件会有警告)
image
输入日志后,点击【ok】
image
下面这个提示显示分支已经创建了,但是需要你switch 才能切换到该分支

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

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

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

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

svn认为tag从branch或者trunk中打标签才合理。
image
点击 commit按钮,既可完成开发
4.3 打标签
创建tag和创建分支(branch)的操作完全相同
image

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

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

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

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

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

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

3.分支实操
下面让我们来完整的走个流程试一试!

3.1创建一个有 trunk/branch/tag的仓库(svn server端)
点击Repositories上点击右键菜单:Create New Repository
image
image
仓库名称建议采用英文名称( lianxi)
image

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

image
将导入的trunk地址复制到 “URL of Repository”中
image
点击 【ok】 按钮提交
image
3.3检出代码到本地
为了下面的练习效果更明显。

我们新建一个空的文件夹,在空白处点击右键“SVN checkout”将项目checkout导出到本地
image
输入项目的仓库路径,将代码检出
image
3.4.分支创建及提交
总的步骤如下,下面我们来一步一步完成

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

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

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

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

切换到分支(switch) demo_20230303_dev_add

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

int add(int x , int y)

{

return x+y;

}

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

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

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

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

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

修改的文件要提交到版本库,只需要选中改文件,点击右键菜单
image
3.4.2 在主干上:修改009.txt的第2行追加2。
提交日志:修改009的第2行追加2
image
3.4.3 创建分支 demo_20230303_dev_add
提交日志:创建分支demo_20230303_dev_add

文件夹的空白处点击右键菜单 TortoiseSVN -> Branch/Tag..
image
点击 To path 文本框后的 【...】,选择branches,并补充分支名称后返回,填写分支日志后点击【ok】

建议分支名称包含日期和功能
image
完成时,系统提示当前并没有切换到新分支
image
3.4.4 在主干上 修改009.txt的第3行追加3。
提交日志:修改009的第3行追加3

3.4.5 切换到分支(switch) demo_20230303_dev_add
在工作区点击右键菜单 TortoiseSVN -> switch
image

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)
image

image

3.4.7在分支demo_20230303_dev_add 上 修改002.txt 末尾追加----
提交日志: 修改002.txt 末尾追加----

image
3.4.8 将分支合并到主干,
提交日志:合并分支demo_20230303_dev_add 到主干

先切换到主干,然后执行合并
image
image
image
image
image
image
image
image
image
image
分支的日志
image
3.5 打标签
如果

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

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

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

从标签1创建分支

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

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

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

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

然后再从该分支创建新的tag
3.6 注意 tag一般只保存阶段成果,不用来保存变化的内容
如果你把tag作为开发分支,则提交时,会有如下所示的警告奥,

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

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

标签:SVN,创建,修改,add,tag,branch,日志,分支
From: https://www.cnblogs.com/sggggr/p/17751677.html

相关文章

  • 【webapp】JSTL(JSP Standard Tag Library)
    JSTL(JSPStandardTagLibrary)是一个标准的JSP标签库,提供了一组用于处理常见任务的标签和函数,以简化JSP页面的开发。以下是关于JSTL的使用方法:引入JSTL标签库:在使用JSTL之前,首先需要在JSP页面中引入JSTL标签库。可以通过<%@taglib%>指令来完成引入。JSTL标......
  • shell 实现harbor 指定仓库镜像tags 查询
    1.需求背景1.1容器发布ci成功以后我们希望CD时候可以选择相关镜像1.2统计指定仓库镜像有多少个版本2.shell代码#!/bin/bash#harbor关键环境变量HARBOR_URL=""USERNAME=""PASSWORD=""PAGE_SIZE=50imges_head=$(echo"$HARBOR_URL"|awk-F//'{print$2}')pr......
  • HarmonyOS应用窗口管理(Stage模型)
     一、 窗口开发概述窗口模块的定义窗口模块用于在同一块物理屏幕上,提供多个应用界面显示、交互的机制。● 对应用开发者而言,窗口模块提供了界面显示和交互能力。● 对终端用户而言,窗口模块提供了控制应用界面的方式。● 对整个操作系统而言,窗口模块提供了不同应用界......
  • The 2nd Universal Cup. Stage 4: Taipei - I(状压DP)
    目录I.IntervalAdditionI.IntervalAddition题意给定一个长度为n$(1\len\le23)$的数组a。你可以进行一种操作:选择区间\([l,r]\)并给这个区间所有的数都加上一个任意的数。问你使得整个数组均为0所需的最小操作次数?思路考虑差分数组无论怎么对于区间\([l,r......
  • HandyControl TagContainer
     tag关闭时 无法获取到要关闭的标签于是改写一下TagContainerpublicclassTagContainer1:ItemsControl{publicTagContainer1(){AddHandler(HandyControl.Controls.Tag.ClosedEvent,newRoutedEventHandler(Tag_OnClosed));......
  • SVN中的回退操作 三种操作比较
    前言今天来研究一下svn中的版本回退操作,以工程版本号270举例三种回退操作一、Updateitemtorevision执行操作后会回退掉271~276版本的更改,使本地的代码为270版本的代码,相当于270版本之后的代码本地还没有更新的状态,更新了就会回来。该操作主要用于测试看270版本代码的表现......
  • DESTOON B2B标签(tag)调用手册
    路径:include/tag.func.php1.标签格式的大致说明{tag(“moduleid=9&table=article_9&length=40&condition=status=3&pagesize=10&datetype=2&order=addtimedesc&target=_blank”)}  moduleid=9是资讯模块ID,模块ID去模块管理查看;article是资讯模块目录名;&length=40是标签......
  • 搭建SVN步骤
    目录如何在linux上搭建SVNCV战士教程个人搭建流程服务端搭建客户端管理查看主库的内容拉取主库当前svn内容提交内容如何删除svnSVN是什么SVN的一些概念SVN的主要功能第1章SVN介绍及应用场景1.1什么是SVN(Subversion)1.2SVN与Git的区别1.2.1SVN集中式版本控制系统1.2.2Git分布式......
  • chisel安装和使用+联合体union的tagged属性+sv读取文件和显示+sv获取系统时间+vcs编译
    chisel安装和使用sbt:scalabuildtool,是scala的默认构建工具,配置文件是build.sbt。mill:一个新的java/scala构建工具,运行较快,与sbt可以共存,配置文件是build.sc。chisel的安装可以参考这篇文章。安装过程务必联网,而没有联网情况下的安装,按照其它的说明,如移动缓存文件等,并无法正常......
  • C# Datagridview 标题/列内容完全居中及选中行突出显示
    一、列标题居中1.首先点击属性窗口的ColumnHeadersDefaultCellStyle属性进入属性设置子界面,并设置子界面属性Alignment的值为MiddleCenter(如下图)2.如果此时列标题未完全居中,那么找到列集合设置属性(Columns)进入子界面,将所有列头的SortMode属性设置为NotSortable(如下图)以上就是......