SVN与TortoiseSVN实战:标签与分支
最近在写《IOS性能调优系列》,今天偷个懒,写写SVN与TortoiseSVN实战的第二篇,标签与分支。
第一篇详见《SVN与TortoiseSVN实战:从入门到精通》
SVN与TortoiseSVN实战系列中很多知识点来源于《版本控制之道》这本书,我写的内容主要结合了TortoiseSVN工具,更多侧重于实际操作。
很多项目人员没有正确运用SVN,仅仅作为源代码的团队共享来用,而没有充分利用标签、分支这些强大的特性。
要正确使用SVN的标签和分支特性,就要先建立起合理的项目仓库结构。
正确的SVN项目仓库结构
很多项目人员往往在创建项目仓库以后,直接将整个项目的源代码提交到仓库的根目录,这往往是由于对SVN没有系统的了解。
引用书里的图片,正确的项目仓库目录结构如下图:

在根目录下首先建立三个目录:
1、trunk:又称为主干,这个子目录才是应该将项目源代码提交到的位置。
trunk目录代表着开发的主线,大部分的开发工作涉及到的更新、提交都在这个目录里,就跟“原始”的SVN使用一样。
2、branches:这个目录就是分支目录,所有新建的分支都应放在这个目录。
每一个branches下的分支代表了一条并行的开发过程,如果不明白可以继续往后看。
3、tags:这个目录是标签目录,所有建立的标签都应放在tags目录下。
每一个tags下的标签代表了一个项目的时间节点,或者说是事件、里程碑。
这三个目录之所以如此命名,完全是约定俗成,而非SVN规定。
什么是分支?
分支的基本概念:一条基于另外一条开发线存在的分支,并共享在分离之前的日志,一个分支就象一个拷贝的存在,并从那里离开,并具有自己的历史。
没有找到关于分支很简洁的解释,我的解释是分支相当于对于开发中的主干进行了复制,从此在分支上后续的所有操作与主干上的所有操作互不影响。

使用分支前:
你开发的IOS App已经测试完毕,提交到APPStore审核,在APPStore审核过程中你可能又开发了些功能但还没通过测试,这时APPStore把你的应用退回了,可能是你的Welcome图片不合格需要换一下,很简单的修改可能完全不需要经过测试流程,但这时你只有两种选择:
1、把代码回滚到提交时的状态,修改后提交;
2、把手头的功能开发完成,经过完整的测试、发布流程提交。
合理使用分支后:
你开发的IOS App已经测试完毕,提交到APPStore审核,根据你提交的版本号建立一个分支,在APPStore审核过程中你可能又开发了些功能但还没通过测试,这时APPStore把你的应用退回了,可能是你的Welcome图片不合格需要换一下,到这里你完全可以轻松应对,只需要把之前建立的那个分支签出到本地,修改后提交。
使用分支后整个过程So easy~
分支里保存的实际上是你建立分支时代码的快照,在分支上进行的修改还可以合并到主干中。
什么是标签?
标签和分支的本质是一样的,可以看到TortoiseSVN中,标签和分支实际上在一个菜单:

分支与标签的使用也是约定俗称的,混用分支与标签SVN也不会禁止。
标签用来记录项目中的事件或里程碑,可以让你给项目中的事件起一个名字,比如发布2.0.0版本,以后你可以使用这个名字来签出它。
标签与分支对比
还是继续上面的例子:
APPStore审核通过,这时你应该为分支建立一个标签,然后将分支的修改合并到主干,然后删除分支。
更直白的说,你可以在分支上进行并行开发,而不应该修改标签里的内容,标签仅应当作为一份代码的快照。
后续
本篇先将理论,下篇讲解使用TortoiseSVN进行分支和标签的实际操作,网上查了下,发现使用TortoiseSVN的分支合并操作居然全是错的,所以感觉到非常有必要写出来,明天更新~
记录,为更好的自己!转载请注明出处~
SVN与TortoiseSVN实战:标签与分支的更多相关文章
- SVN与TortoiseSVN实战:TortoiseSVN新建及合并分支
硬广:<SVN与TortoiseSVN实战>系列已经写了两篇,第一篇<SVN与TortoiseSVN实战:从入门到精通>,关于分支和标签的知识介绍可翻阅第二篇<SVN与T ...
- SVN与TortoiseSVN实战:属性的奇技淫巧(一)
硬广:<SVN与TortoiseSVN实战>系列已经写了六篇,本系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,预计再用三.四篇来结束这个系列. 本篇详解一下SVN的属 ...
- SVN与TortoiseSVN实战:补丁详解
硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...
- SVN与TortoiseSVN实战:冲突详解(二)
硬广:<SVN与TortoiseSVN实战>系列已经写了四篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...
- SVN与TortoiseSVN实战:冲突详解(一)
硬广:<SVN与TortoiseSVN实战>系列已经写了三篇,第一篇<SVN与TortoiseSVN实战:从入门到精通>,第二篇<SVN与TortoiseSVN实战:标签 ...
- SVN与TortoiseSVN实战:从入门到精通
SVN,版本控制程序,是支撑项目开发的基础工具. 在团队开发中,不管是程序员还是美工.测试等人员,都会用到SVN,通常会把SVN视为源代码管理工具,但对于SVN更准确的理解是: “帮助参与项目人员的管 ...
- SVN与TortoiseSVN实战:补丁详解(转)
硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...
- SVN与TortoiseSVN实战:文件加锁详解
硬广:<SVN与TortoiseSVN实战>系列已经写了八篇,本篇是完结篇,整个系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解,以技巧性为主. 本篇详解使用Tortoi ...
- SVN与TortoiseSVN实战:属性的奇技淫巧(二)
硬广:<SVN与TortoiseSVN实战>系列已经写了七篇,本系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解. 关于属性的奇技淫巧较多,分为两篇来写,第一篇详见< ...
随机推荐
- (C#) 设定时间格式
private string GetCurrentDateTime() { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") ...
- (C#) 判断相等?
值类型直接用 == 号判断就好. 但是对于引用类型,需要实现IComparable 接口,或者重写 Equal 方法,来实现自己的比较目的. 因为对于引用类型,==号比较的是入口地址,对于同一个cla ...
- MSSQL学习笔记
阅读目录 1.什么是SQL语句 2.使用sql语句创建数据库和表 3.创建数据表 4.数据完整性约束 5.四中基本字符类型说明 6.SQL基本语句 7.类型转换函数 8.日期函数 9.数学函数 10. ...
- spark MapOutputTrackerMaster
最近用了一个RowNumber() over()函数 进行三张4000万数据的关联筛选,建表语句如下: create table CiCustomerPortrait2 as SELECT ROW_N ...
- HTML 表单验证和事件
1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...
- wamp
安装好wamp,但是图片没有变绿,大部分原因是80端口被占用. 修改端口号:可以从文件httpd.conf 将# Change this to Listen on specific IP addres ...
- memcache 内部原理实现
Lazy Expiration memcached 内部不会监视记录是否过期,而是在 get 时查看记录的时间戳,检查记录是否过期.这 种技术被称为 lazy(惰性)expiration.因此,mem ...
- python(6)时间戳和北京时间互转,输出当前的时间和推到七天前的日期
项目发展的需要:(包含时间函数)time datetime 时间戳和北京时间互转 import time import datetime s = '2015-04-17 11:25:30' d = d ...
- JQuery之DataTables强大的表格解决方案
1.DataTables的默认配置 $(document).ready(function() { $('#example').dataTable(); } ); 示例:http://www.guoxk ...
- 解析wamp的php.ini设置不生效的原因
你是否有过这样的经历,当你打开wamp的php.ini,并进行参数修改之后.再回到命令去运行你的php脚本,却发现你的设置居然不生效? 如果有这样的情况,那你得先了解php的两种运行运行环境,一个在命 ...