版本控制 - SVN/TortoiseSVN
研读了blog: 1. http://www.open-open.com/lib/view/open1346982569725.html
2. http://www.360doc.com/content/12/0816/19/1317564_230547958.shtml
3. http://developer.51cto.com/art/201005/201718.htm
4. http://www.cnblogs.com/dafozhang/archive/2012/06/28/2567769.html
5. http://snowolf.iteye.com/blog/953735 (new one)
(个人感觉open经验库里的东西很多都是精挑细选出来的,赞一个)
其实,搞软件开发刚满一年的我,对版本控制并不熟悉。在平时的开发中,仅仅是用IDE集成的subversion来update/commit,极端情况就是遇到subversion出现问题时,就换用“小乌龟”代替。,
上个星期,老板发话,需要把本地server上的代码改动增加到版本库中去。这下抓瞎了。。。真心对版本控制中的branches, tags, merge一窍不通。
本着会用+稍微深入研究的原则,研读了以上blog.
首先,按照address 1中的实验一步步做完,基本能领会分支branches创建与合并的缘由,过程,以及如何使用TortoiseSVN来完成版本控制。
下面我把自己的体会罗列下来,供以后参考:
1. 用TortoiseSVN创建本地仓库,这个仓库用来记录版本(包括/trunk,/branches,/tags中的所有版本)
2. 在新建目录下check out新建仓库(如果用TortoiseSVN,会自动创建SVN标准目录结构:/trunk,/branches,/tags)
3. 此时的/trunk,/branches,/tags均与版本库关联。在/trunk目录下,新建project(可以用IDE),改动后,通过Add和Commit将改动提交到版本库中,并更新版本。
4. 第3步可以理解为起初的开发主要集中在trunk上。之后,由于功能开发模块化,所以每个开发人员可以各自拉出一条分支(branch)进行独立+并行开发。
5. 建立branch时,先在trunk某个版本的基础上,利用TortoiseSVN的branch/tag...功能在版本库的/branches下新建同样的项目目录(这样最好,容易匹配)(这样实际上只是与trunk某个版本建立了软连接,并没有copy代码);其次,对branch进行update,这才是check out下来代码。到此,branch同trunk的某个版本同步了。
6. 在branch和trunk的并行开发过程中,需要二者相互更新,以避免将来把branch merge回trunk时所造成的一堆冲突。也就是说,为避免branch越走越远,需要branch不断的merge trunk上的改动。用TortoiseSVN操作,请参照address 1中“将trunk中的修改同步到branch”一节。
7. 将开发结束的branch merge回trunk。首先update branch下的项目,然后以它为基础,使用TortoiseSVN的merge功能。
和address 1中的步骤有所不同。最新版本的TortoiseSVN将Reintegrate功能放到Merge Type的下一步了。如下步骤操作:

8. 如果经常执行步骤6,不会产生冲突。但出现冲突时,可以使用TortoiseSVN现解决。
9. 一般此时,branch已经完成任务,可以删除了。
10. 在开发过程中,tag(标签)的作用是作为milestone。每个tag可以认为是一个可用的版本,比如用作demo。tag的制作方式和branch类似。
总结:
branch主要用于新功能的开发
合并发生在本地working copy,只要你不提交就不会影响到repository
合并前一定要先update、commit,保证不会out of day,并将本地的修改保存到repository
branch和trunk并行开发的过程中,要经常同步,将trunk的修改合并到branch,合并时选择"Merge a range of revision"
branch最后合并回trunk时,merge type选择"Reintegrate a branch"
老板交待任务的背景:1. 稳定版R1已经交付使用,部署到生产服务器上;2. 本地server起初也是稳定版R1,但为满足特殊需求/解决R1中存在的bug,仅在本地server上做了修改(不是patch)。由于特殊原因,两个版本都需要稳定下来。
所以,稳定版R1不做任何改动;本地server上的改动(幸好每次改动都有记录)以branch的形式稳定下来,不merge回R1;正在开发的R2也算作一个版本了。
为顺利完成任务,将步骤预想如下(预计时间1小时):
1. 查看稳定版R1是否打了tag(如果需要打tag,则命名为*_release_1.0,鉴于将tag设置为readonly比较繁琐,可以暂不考虑);
2. 新建目录**,在其中新建svn标准目录结构:/trunk; /branches; /tags.
3. 在trunk目录下,新建目录R1,并check out R1的SVN地址 / 直接使用 /tags/*_release_1.0。
4. Based on /trunk/R1 或者 /tags/*_release_1.0,在版本库中创建/branch/dev_R1;然后check out。
5. 将本地server的改动CURD到/branch/dev_R1;
6. Based on /branch/dev_R1,打tag /tags/*_release_1.1.
7. 查看/tags/*_release_1.1的log。
版本控制 - SVN/TortoiseSVN的更多相关文章
- 版本控制工具 - TortoiseSVN
版本控制工具 - TortoiseSVN 使用SVN需要安装三个软件,Visual SVN Server是用于存储项目仓库的中央服务器,Tortoise SVN是管理版本控制的软件,Visual SV ...
- SVN(TortoiseSVN)提交时忽略bin跟obj目录
SVN(TortoiseSVN)提交时忽略bin和obj目录 一般协作开发情况下,有意思无意将bin和obj目录添加到版本管理中是很烦人的事儿,在VS中不断地编译程序集和提交将带来版本暴增问题.如果你 ...
- iOS开发——开发实战篇&版本控制SVN和Git使用详解
版本控制SVN和Git使用详解 公司的实际开发中,在天朝使用较多的还是SVN,因为SVN是集中式的,在天朝上班你们都懂的! -----------------svn--------- ...
- 【版本控制——svn】
reposity_name //版本库 { Passwd //验证密码文件 Authz //权限控制 Server.conf //主配置 } Authz //权限控制 //由[groups]标签控 ...
- 个人环境搭建——版本控制SVN
版本控制SVN SVN服务器配置: 第一部分:svn服务器搭建(主要是四步走) 参考:http://www.son1c.cn/show/920.html 一,安装Subversion sudo apt ...
- 版本控制— SVN & git
版本控制—— SVN & GIT 提问 什么是版本控制? 是能够一直监视代码文件的变更,并存储这些文件以便将来引用的一种机制(软件) 为什么要使用版本控制? (1)记录哪个开发人员做了变更 ( ...
- 版本控制Subversion TortoiseSVN apache VisualSVN笔记(转载)
转载于http://blog.sina.com.cn/s/blog_6b94d5680101m7ah.html Subversion(简称svn)是近年来崛起的版本管理软件,是cvs的接班人.目前,绝 ...
- 了解什么是版本控制 & 用tortoiseSVN 建立本地版本库来管理自己的代码
什么是版本控制 版本控制系统(Version Control System,简称VCS)广泛地应用于程序开发等领域,它可以协助你将某个指定的文件(甚至是一整个项目)返回至某个之前记录的状态,查看发生了 ...
- lzugis—搭建属于自己的小型的版本控制SVN
对于不了解SVN的同志们可以参考下"mh942408056"的这篇博文,SVN简介,链接地址为:http://blog.csdn.net/mh942408056/article/d ...
随机推荐
- Silverlight学习之初始化参数
首先需要在Silverlight的宿主页面添加上initParams,如 <param name="initParams" value="key1=jerry,ke ...
- Mongodb添加地理位置索引
1.同步站点信息到mongo中(支持mysql.sqlserver数据同步) 2.在Collections文件夹下所在文档右键,在菜单中选择Add Index, 3.然后进行数据查询{ "m ...
- 为什么使用 Redis及其产品定位 (转载自http://www.infoq.com/cn/articles/tq-why-choose-redis)
传统MySQL+Memcached架构遇到的问题 实际MySQL 是适合进行海量存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不 ...
- MySQL性能优化笔记整理
一.测试篇 1.测试目的,就是量化找出短板(基础参数配置) 2.测试三大指标 IOPS:每秒处理的IO请求数,即IO响应速度(注意和IO吞吐量的区别) QPS:每秒请求(查询)次数 TPS:每秒事务数 ...
- xtrabackup之Innobackupex增量备份及恢复
演示增量备份 #启动一个全备 innobackupex \ > --defaults-/my.cnf \ > --host=127.0.0.1 \ > --user=xtrabk \ ...
- Learning Scrapy笔记(五)- Scrapy登录网站
摘要:介绍了使用Scrapy登录简单网站的流程,不涉及验证码破解 简单登录 很多时候,你都会发现你需要爬取数据的网站都有一个登录机制,大多数情况下,都要求你输入正确的用户名和密码.现在就模拟这种情况, ...
- USB协议分析
一.USB设备描述结构 1.逻辑组织结构 在USB设备的逻辑组织中,包含设备.配置.接口和端点4个层次.设备通常有一个或多个配置,配置通常有一个或多个接口,接口有零或多个端点. 每个USB设备都可以包 ...
- 6.css文本样式
文本样式,只要针对的是文本的效果和文本的方位,即文本样式和文本控制总结起来有一表中的属性可用: 属性名 说明 CSS 版本 text-decoration 装饰文本出现各种划线 1 text-tran ...
- FLEX AS3.0 百度地图
window xp系统 FlashBuilder4.5 先上百度下载flash api 下载地址http://developer.baidu.com/map/flash.htm 新建一个flex项目 ...
- git传输协议原理
git精神:distributed-is-the-new-centralized 转自:http://git-scm.com/book/zh/v1/Git-%E5%86%85%E9%83%A8%E5% ...