SVN中Branch和tag的比较
在SVN中Branch和tag在一个功能选项中,在使用中也往往产生混淆。在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别。至于何时用tag,何时用branch,完全由人主观的根据规范和需要来选择,而不是强制的(比如cvs)。

一般情况下,tag,是用来做一个milestone的,不管是不是release,都是一个可用的版本。这里,应该是只读的。更多的是一个显示用的,给人一个可读(readable)的标记。
branch,是用来做并行开发的,这里的并行是指和trunk进行比较。比如,3.0开发完成,这个时候要做一个tag,tag_release_3_0,然后基于这个tag做release,比如安装程序等。trunk进入3.1的开发,但是3.0发现了bug,那么就需要基于tag_release_3_0做一个branch,branch_bugfix_3_0,基于这个branch进行bugfix,等到bugfix结束,做一个tag,tag_release_3_0_1,然后,根据需要决定branch_bugfix_3_0是否并入trunk。对于svn还要注意的一点,就是它是全局版本号,其实这个就是一个tag的标记,所以我们经常可以看到,什么什么release,基于xxx项目的2xxxx版本。就是这个意思了。但是,它还明确的给出一个tag的概念,就是因为这个更加的可读,毕竟记住tag_release_1_0要比记住一个很大的版本号容易的多。

SVN中Branch和tag建立的方法比较简单,totoiseSVN中的操作是:
1.选择Branch和tag..
2.在出来的界面中的ToURL中填上URL,一般是svn://IP/Project/branches/branch-1,这样就建立了一个branch-1的branch.建立tag是一样的操作,只不过URL一般是svn://IP/Project/tags/tag-1
3.后面的Createcopyfrom是用于选择从你当前的workingbase中的哪个版本中建立Branch和tag,可以根据自己的选择来订制,一般选择HeadRevision
subclipse中几乎是一样的操作。

Merge分为很多种:
1.多个branch之间merge
2.branchmerge到trunk
3.trunkmerge到branch
第2种用的比较多,比如在otfs接口中netamount的需求提出后就得建立一个netamount的branch,trunk继续在非netamount的情况下继续开发,netamount单独开发,当netamount功能测试通过后,将netamountbranchmerge到trunk下,然后将trunkrelease。第3种情况用的也不少,如上的例子,当用户进行netamount测试时,如果用户不想只测试netamount的功能,则需要将trunk中的修改merge到netamountbranch,然后从netamountbranch中发布一个版本供用户测试。

branch merge to trunk在tortoiseSVN操作如下:
1.选择TortoiseSVN->Merge
2.选择Reintegrateabranch
3.选择FromURL,URL填好之后可以点击ShowLog,可以看看这个branch是否是你要merge的内容,下面的Workingcopy中也可以ShowLog,可以确认一下你的工作目录是否是trunk。确认后点击Next
4.MergeOptions里面有些选项,根据需要来选择,TestMerge按钮会告诉你这次Merge会做哪些操作,最好先TestMerge一下!如果是预期的Merge操作,点击Merge则可以将branchMerge到本地工作目录下
5.有冲突的文件需要解决好冲突,解决之后点击svncommit则完成了merge

SVN中Branch和tag比较介绍时从多个revision中merge到本地工作目录在tortoiseSVN的操作如下:
1.选择TortoiseSVN->Merge
2.选择Mergearangeofrevisions
3.URLtomergefrom填上merge的来源,merge来源一般和你的workingcopy是不同的branch或者workingcopy是trunk而mergefrom是branch
4.Revisionrangetomerge填上需要merge的revision,格式是1,3,5或者1-10
5.后续操作同Reintegrateabranch

subclipse进行Merge操作同tortoiseSVN的操作方式有所区别,原理基本同Mergearangeofrevisions。
点击Team->Merge后,只有一个界面,这个界面提供了两种Merge操作方式:
1.Merge某个版本范围内的修改到本地工作目录上
2.Mergefeaturebranch到trunk(也需要先merge到本地)
第1种的操作方法是:
1.在fromurl中填上branch的url
2.fromrevision中选择建立这个branch的revision号,不是最新的那个版本号!
3.tourl框中勾上”Use’From:’URL”这个checkbox,ToRevision中选择需要需要Merge到的revision号,一般勾headrevision
4.Dryrun让你预览一下merge效果,UnifiedDiff将Merge的两边进行Diff并将Diff结果保存到文件中。(在我机器中Dryrun没有窗口出来,diff结果的文件除非只有很小的变化,不然看得头大)
5.点击Merge将merge到本地,这时候与版本库进行一下同步应该和上一步的dryrun有同样的效果,如果merge过来的东西不是你预期的更改可以选择revert,但是新增的文件需要手工删除!如果是预期的merge效果,那commit,记得在comments中写上merge来的branch、fromrevision、torevision(不要写head,写数字)总的来看subclipse的merge操作并不方便,不如tortoiseSVN。SVN中Branch和tag的比较介绍完毕。

svn三大目录trunk、branch和tag的更多相关文章

  1. svn中的trunk,branch和tags(转)

    转自:https://www.cnblogs.com/keyi/p/5953649.html  我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我 ...

  2. [转]SVN的trunk branch tag

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...

  3. SVN trunk、branch、tag的用法

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是svn://proj/|+-trunk+-branches+-tag ...

  4. 版本控制之五:SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤(转)

    使用场景: 假如你的项目(这里指的是手机客户端项目)的某个版本(例如1.0版本)已经完成开发.测试并已经上线了,接下来接到新的需求,新需求的开发需要修改多个文件中的代码,当需求已经开始开发一段时间的时 ...

  5. SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤

    使用场景: 假如你的项目(这里指的是手机客户端项目)的某个版本(例如1.0版本)已经完成开发.测试并已经上线了,接下来接到新的需求,新需求的开发需要修改多个文件中的代码,当需求已经开始开发一段时间的时 ...

  6. [Z] SVN的trunk、branch、tag

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...

  7. [转载]SVN trunk、branch、tag的用法

    Subversion有一个很标准的目录结构,是这样的. 比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-t ...

  8. SVN的trunk、branch、tag(二)

    转——简单的对比 SVN的工作机制在某种程度上就像一颗正在生长的树: 一颗有树干和许多分支的树 分支从树干生长出来,并且细的分支从相对较粗的树干中长出 一棵树可以只有树干没有分支(但是这种情况不会持续 ...

  9. TortoiseSVN使用步骤和trunk,Branch,Tag详细说明

    1 安装及下载client 端 2 什么是SVN(Subversion)? 3 为甚么要用SVN? 4 怎么样在Windows下面建立SVN Repository? 5 建立一个Working目录 6 ...

随机推荐

  1. 最新版CocoaPods的使用与安装-以导入ReactiveCocoa框架为例

    一.什么是CocoaPods?前言: 思考如何引入一个第三方框架. 例如: 百度地图SDK.友盟.ShareSDK. 信鸽推送等.从github或某处下载第三方SDK工程中导入所需要的SDK的文件 . ...

  2. 【BZOJ-1324】Exca王者之剑 最小割

    1324: Exca王者之剑 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 483  Solved: 248[Submit][Status][Disc ...

  3. poj1379 模拟退火

    题意:和上题一样...就是把最小值换成了最大值.. ref:http://www.cppblog.com/RyanWang/archive/2010/01/21/106112.html #includ ...

  4. dedecms /member/mtypes.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Dedecms会员中心注入漏洞 Relevant Link http:/ ...

  5. Objective-C NSData与实现NSCoding协议进行序列化和反序列化

    1.NSData NSData是Objective-C语言中数据的基本类型,其成分可以理解为字节指针和长度的封装的类,来看看源代码 @interface NSData : NSObject <N ...

  6. Python 简介和入门

    1.Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  7. AngularJs angular.element

    angular.element 将DOM元素或者HTML字符串一包装成一个jQuery元素. 格式:angular.element(element); element:包装成jquery对象的html ...

  8. java.lang.UnsupportedOperationException: Not supported by BasicDataSource

    场景: SpringMVC+Hibernate+Maven 问题: 在src/main/resources 目录中添加hibernate.properties文件, 则如果存在这句hibernate. ...

  9. 数据结构与算法分析–Minimum Spanning Tree(最小生成树)

    给定一个无向图,如果他的某个子图中,任意两个顶点都能互相连通并且是一棵树,那么这棵树就叫做生成树(spanning tree). 如果边上有权值,那么使得边权和最小的生成树叫做最小生成树(MST,Mi ...

  10. 给linux添加yum源。

    在玩linux的过程中,经常会下载一些源码包.软件大多是国外人写的,由于众所周知的原因,网络下载很慢. 所以想到了更新yum源的方法. 我的linux版本是CentOS6.3的. 以下参考百度. 1, ...