在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.在出来的界面中的To URL中填上URL,一般是svn://IP/Project/branches/branch-1, 这样就建立了一个branch-1的branch. 建立tag是一样的操作,只不过URL一般是svn://IP/Project/tags/tag-1 
3.后面的Create copy from是用于选择从你当前的working base中的哪个版本中建立branch/tag,可以根据自己的选择来订制,一般选择Head Revision 
subclipse中几乎是一样的操作。

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

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

从多个revision中merge到本地工作目录在tortoiseSVN的操作如下: 
1.选择TortoiseSVN->Merge 
2.选择Merge a range of revisions 
3.URL to merge from填上merge的来源,merge 来源一般和你的working copy是不同的branch或者working copy是trunk 而merge from是branch 
4.Revision range to merge填上需要merge的revision,格式是1,3,5或者 1-10 
5.后续操作同Reintegrate a branch

subclipse进行Merge操作同tortoiseSVN的操作方式有所区别,原理基本同Merge a range of revisions。 
点击Team->Merge后,只有一个界面,这个界面提供了两种Merge操作方式: 
1.Merge某个版本范围内的修改到本地工作目录上 
2.Merge feature branch到trunk (也需要先merge到本地) 
第1种的操作方法是: 
1.在from url中填上branch的url 
2.from revision中选择建立这个branch的revision号,不是最新的那个版本号! 
3.to url框中勾上"Use 'From:' URL"这个check box, To Revision中选择需要需要Merge到的revision号,一般勾head revision 
4.Dry run让你预览一下merge效果,Unified Diff将Merge的两边进行Diff并将Diff结果保存到文件中。(在我机器中Dry run没有窗口出来,diff结果的文件除非只有很小的变化,不然看得头大) 
5.点击Merge将merge到本地,这时候与版本库进行一下同步应该和上一步的dry run有同样的效果,如果merge过来的东西不是你预期的更改可以选择revert,但是新增的文件需要手工删除!如果是预期的merge效果,那 commit,记得在comments中写上merge来的branch、from revision、to revision(不要写head,写数字)

总的来看subclipse的merge操作并不方便,不如tortoiseSVN

SVN中Branch/tag的比较相关推荐

  1. Svn中的tag标签的用法和意义

    使用场景: 假如你的项目的某个版本已经完成测试开发.测试并已经上线,接下来街道新的需求,新项目开发需要修改多个文件的代码,当需求已经开发一段时间的时候,突然接到用户和测试人员的反馈,项目中某个重大的b ...

  2. SVN中tag branch trunk用法详解

    来源:http://developer.51cto.com/art/201005/201718.htm 本节主要讲解一下SVN中tag branch trunk的用法,在SVN中Branch/tag在 ...

  3. SVN中tag和branch的区别

    在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆. 在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别.至于何时用tag ...

  4. SVN trunk branch tags 区别

    Trunk: 主工作目录,从开始编码到当下所有开发功能,测试,最新代码. Branches: 分支目录 1.Truank的重要版本发布后 创建一个分支上后可修复Bug; 2. 在不影响Trunk的前提 ...

  5. svn如何取消某个文件的版本管理_怎样去除SVN中的某个版本之前的所有版本

    地狱门神 在某些时候,我们可能需要一个存放二进制文件的SVN库,用来保存每日构建的结果等. 但是这种库会趋于越来越大,最后会占用很多磁盘空间. 这时我们会想到能不能删掉某个版本之前的所有版本,以节省磁 ...

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

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

  7. SVN中trunk、branches、tag的使用

    我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说明SVN里的trunk,branched,tags这个三个文件目录的用法. ...

  8. svn创建分支(branch/tag)出现“path”already exists

    不用在visual svn中创建相应的目录,svn会自己创建目录,但是自己必须指定该目录名称. 比如:

  9. Svn中可能出现的问题解决办法

    http://blog.sina.com.cn/s/blog_8acf1be10101i5bo.html 百度很多解决Path is not a working copy directory的方法,唯 ...

最新文章

  1. 开启php,php开启openssl的方法
  2. html左边高140px怎么设置,html:侧边栏+滚动div,高度设置为当前页面大小
  3. python迭代器使用_Python迭代器的用法
  4. java array 元素的位置_JAVA集合类,有这一篇就够了
  5. 怎样用c语言输出一个函数图像,请教 怎么才能用C输出一个函数的图像?大侠 帮帮忙啊...
  6. 你必须要知道的数据备份工具rsync
  7. 造成ORA-01843 无效的月份 的一些原因
  8. 数字图像处理 冈萨雷斯(第四版)距离测度
  9. 观察数据时易出错的点
  10. 电子阅读器行业市场研究分析及未来趋势预测分析
  11. php hprose,基于 hprose/hprose-php开发的Laravel扩展:laravel-hprosed的介绍
  12. 如何处理四级标题、五级标题及其对应的样式?
  13. 服务器共享文件设成禁止删除,服务器共享文件夹权限 禁止删除共享文件方法...
  14. 今天我们不搞科研,来搞颜色
  15. 计算机图形学四:着色-Shading
  16. RabbitMQ 中的 VirtualHost 该如何理解
  17. LocalSend 电脑和手机互传软件教程解答手机端无法搜索到电脑的解决方案
  18. 我的世界服务器自动被踢怎么可以进去,我的世界中国版服务器中如何解决玩家作弊的简单方法...
  19. 南京大学计算机技术是重点学科吗,2019南京大学重点学科和重点专业大盘点
  20. 课程学习(Curriculum Learning, CL)

热门文章

  1. debian 7 mysql_debian7.2+nginx+mysql
  2. python取模1e9+7_G题取1E9+7wa,取1E9+9等一些其他的值ac
  3. java ftp connect_java操作Ftp文件的一些方式(一)
  4. linux脚本定时运行脚本,linux定时运行命令脚本——crontab
  5. js保存html页面的图片,html使用js截取页面保存为图片
  6. 易语言mysql表新增防止重复_sqlite数据库 大量插入数据时如何避免重复插入(易语言,做好用sql语句写下)...
  7. java安装后启动程序在哪_java – 有没有办法在安装后使用一些“帮助应用程序”立即启动应用程序?...
  8. 使用sun misc Unsafe及反射对内存进行内省 introspection
  9. Java学习笔记2.3.3 运算符与表达式 - 关系运算符
  10. 大数据学习笔记21:MR案例——分区全排序