从VSS到SVN

从VSS到SVN

 
在SVN中如何打Label?
 
很多人有VSS经验的人,接触SVN后,会问“在SVN里怎么打标签?“
 
我一般回答:在SVN中,不需要标签这个概念。
 
让我们瞧一下VSS为什么需要标签。如图
 
 
在VSS中,记录的是每一个文件的时间轴。比如:Main.c在08.01.13和08.02.13被各修改过(Check In)一次;Main.h在08.01.23被修改过一次。每一个check in,只能标记一个文件在什么时候修改过,不能反映出整个版本机当时的状态。
 
所以,在使用VSS时,我们需要在版本机处于关键状态,比如2.0版本将要发布,把版本机的整体状态标志出来,也就是加一个Label. 这样,在需要时候,可以方便的将所有代码回溯到2.0的状态。
 
当然,也可以去浏览VSS的全部文件的历史记录,找到需要的时间点。可如果项目中有成千上万的文件,比如1000个文件,平均每个修改10次,那么这个历史记录就会有1000 * 10 = 1万条,你就慢慢去找去吧!
 
SVN的开发者(不管是不是他们原创),设计了一个绝妙的模式,避免了这个问题。他们观察到,用户更关注的,不是某一个文件的历史,而是整个版本机的历史。所以SVN历史记录的单位,revision,记录的版本机整体的状态。
 
revision是一个整数,从1开始,每次版本机发生变化,甭管修改一个文件也好,修改1万个文件也好,revision都只增加1。
 
如图,09.01.02时修改一次Main.c,得到Revision 101;第二天修改了Main.c和Main.h,虽然是两个文件,但是Revision还是加一,到102。
 
 
VSS中的需要做的3条记录,SVN只要2条历史记录就好了。极端一点,1000个文件,修改10次,如果用SVN,那么你浏览历史记录,看到就不再是10000条无意义的记录,而是10条简明扼要的列表了。10000条记录,变成了10条。
 
这就是SVN中不再需要Label的原因,我们的每一次修改(Commit)就是一个Label.
 
 
Branch是一种高级的Label
 
不过呢,随着时间推移,Revision也会变的太多太多。比如我在用的SVN版本机,两年下来,Revision已经达到了3000以上,虽然SVN的搜素功能还是不错的,多少还是有点麻烦。解决这个问题的,需要分支来帮忙.
 
VSS我用了4年,很奇怪的一件事情就是,我几乎从来没有开过分支。现在回忆,首先是因为原来那个公司把版本机当宝贝,除了配置管理员,咱没这个权限。
 
另外一个原因是VSS自己的问题。每次开了分支之后,合并是代码都是个大麻烦。我还记得,那个时候一到合并版本的时候,各路领导如临大敌,亲临前线,指挥作战。4,5个人坐在电脑前,用Beyond Compare比对数百个文件。往往熬上整天才能完成。
 
比较起来,SVN的分支真是好用不少,开个分支就是一条命令1秒钟,也不会增加版本机的大小,而且合并基本上也能自动完成了。但要达到这种流畅的感觉,还是需要正确的使用策略。
 
SVN开分支的命令虽然只有一条,但分支却有两种主要的使用方式:发布分支和特性分支,需要采用不同的策略。
 
发布分支
 
前面讲过,Revision太多也不好找关键时刻。所以,可以在重要的时刻,比如发布版本前,开一个分支出去。这种分支,叫做发布分支。
 
 
当主干上的开发,达到需要发布的时刻,比如2.版本时,应该先开一个分支branch2.0,进行测试。发现的问题都在这个分支上修改,最终达到可以正式发布的2.0.1。然后将修订的Bug合并到主干,再开一个分支2.0.1放到tag目录下,表示这个分支正式发布了。tag目录下这个分支,就起到了VSS中lable的作用。如果你熟悉开源软件,就应该记得,大部分开源软件的版本机,分为三个目录:trunk, branches, tags,就是分别用来放“主干,分支和标签”的。这里tag和branch其实是一回事情,只是习惯上,tag表示一个分支的最终状态,是不应该再修改的。
 
为什么不是反过来,在分支上完成整个2.0开发?就像下面这样:
 

有VSS经验的人,往往会采用这样的一个模式,在2.0版本之前,就把分支开出来,然后全部的开发,都在这个分支上做。所以,最后分支和主干会有比较大差异,最后合并的时候,悲剧就不可避免了。而前一种方式,分支上只有修订bug,改动不会很大,合并也就很容易了。
 
 
特性分支
 
有时候呢,确实需要做一些开发分支出来,而不能在主干上直接开发。比如A,B两个team,各自都要做一个特性,如果都在主干上改,会造成很多冲突。这个时候,就不可避免得要开特性分支了,在上面做开发了。
 
 
特性分支的使用诀窍,在于养成习惯,把主干的修订持续的合入分支来,尽量让分支接近主干。依赖SVN的自合并,这样做不会花很多的时间,但是却会让最后的合并变得简单一些。
 
 
最后的话
 
其实今天,VSS已经是一个非常遥远的名词了,人们讨论的,是GIT, Mecurial这的分布式版本管理软件与SVN的优劣。微软自己也已经很久不用VSS,代之以TFS了。希望这篇文章,对还生活在旧时代的同学们有点帮助吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值