CVS版本管理之长剑出鞘

原创 2004年06月07日 09:47:00

软件行业有一个关于软件使用的“28”或是什么“37”原则的。也不知道是那位老大总结的,但是真的很准确。我们一直用CVS对代码进行管理,可我想说的是,我一直就使用CVS里最最基本的部分。cvs co,cvs ci, cvs up,cvs add,都是最基本的功能,我从来就没有过仔细的研究一下CVS,惭愧!

我参与的项目release好一段时间了,这期间经历了市场血与火的洗礼...。做应用软件的就是这样,你一定会碰到不同用户的不同需求,你需要为其定制开发。好,当有A省的用户有特殊的需求的时候,我们就用CVS为其建立一个新的project。同理,当有B省用户有特殊的需求的时候,我们还是采用同样的办法。我们一开始没有觉得这样哪里不好,为不同的用户建立不同的project,很清晰,维护起来还挺方便。就像《后天》里的情节哪样,你总是要对你不正确的做法付出惨痛的代价。我们很快发现了我们的做法的致命伤,当我们需要修改一个bug,或者是升级程序,加入通用的功能的时候,我们需要手工同步很多版本。god,大量的重复劳动!我清楚的听到我邻座那个可爱的女孩的抱怨:真麻烦,要同步这么多版本。

有的时候,我觉得自己很幸运^_^。当有一个问题困扰着我的时候,我准备上一个常去的论坛向guru请教的时候,发现大家正在那里热火朝天的讨论着这个问题。这次也差不多,一天晚上和一个以前的同事聊了一些关于版本管理的问题。那个同事现在在一家外企工作,据称他们的版本管理很规范,有很专业的专门人员来做这件事情。他告诉我,应该可以采用CVS的分支功能来解决这个问题。虽然我当时云里雾里,不太明白,他也不是做版本管理的,但是,重要的是这个idea。我是一个听人劝的人,马上从一个同事那里揩来《CVS-开源软件开发技术》那本书。仔细的研究了一下分支的功能。啧啧,这就是我想要的,哈哈,在屋里跳了一会小天鹅。嗯,程序员总是这样大喜大悲的!

把我的轻骑兵音箱调到很大声,听着《痴心绝对》。我喜欢这样写文章^_^。好吧,让我们看看什么是CVS的分支。

我们把一个项目的一个主要开发过程称作开发主线。当某一个特殊事件发生的时候,例如,有一个用户有特殊的需求,于是就从这个开发主线里分离出来一个叉,以满足用户特殊的需求,那么这个叉有它自己的发展方向,这就是分支,就像是一个大树在春暖花开的时候,长出来的新枝。

             ---------分支
            /
           /
          /
  ------●----------------------------开发主线


上面这个点,代表开发主线的最新版本,那么这个时候可以从开发主线建立分支来进行定制开发。接下来,开发主线和分支就可以有各种的发展方向。而且,如果可以的话,分支的代码可以重新合并到开发主线中。开发主线的代码也可以更新到分支代码中。

假设在我们的home目录下的proj目录就是我们的工程。下面具体看一下,如何建立分支:

1、先在开发主线上创建一个标签,就是上图中那个点。这样做是为了以后可能有使主干重新回到分支创建时的状态的需求。在你的工程目录的top level下执行cvs tag Root-of-Version_2.5.0.0。

2、创建分支:cvs tag -b ln_version_branch(-b选项就是创建分支)。

3、接下来,你可以在工程目录的top level下直接执行cvs update -r ln_version_branch转到分支上进行工作。也可以通过cvs co -r ln_version_branch -d ln_proj proj命令新checkout一份分支的本地拷贝。-d选项是创建本地目录名字。这里建议用第二种用法,因为在一个本地拷贝下通过命令来回在主线和分支转换,容易产生混淆,你也可能忘记这么去做。

4、这样分支的开发和主线的开发就可以分离开。如果需要的话,可以把分支上的代码合并到开发主线上,当然在合并的过程中可能需要解决一些冲突。cvs update -j ln_version_branch,通过这样的命令把分支代码合并到主线上。当然我们这里的例子是针对用户特殊需求产生的分支,一般不会把分支合并到开发主线中。但是,对于bug修改等产生的分支,就会有需求把分支合并到主线上。这里有一点要强调的是,当开发主线的程序员合并分支的代码的时候,需要互相沟通。在开发主线程序员成功合并分支代码后,在主线代码上要设立一个点(cvs tag)来标志这次合并;在分支代码上开发的程序员,在合并之后,也要建立一个点来标志这次合并,例如,cvs tag ln_version_1。这样做的好处是当下次在进行代码合并的时候,在开发主线上的程序员可以通过命令cvs update -j ln_version_1 -j ln_version_branch,这里ln_version_branch代表分支的末梢,因此该命令不是重新合并整个分支代码,而是合并自从合并点ln_version_1到现在修改的代码,这样可以防止重新合并整个分支而带来的冲突。

5、对于我们这里针对用户特殊需求产生的分支,可能更多需要的是把开发主线上的代码更新到分支上。cvs update -j HEAD,这里HEAD代表了主干的末梢,也就是这个命令合并了主线在创建该分支伊始到目前为止,所有的主线上修改的代码。这里还是需要分支开发人员和主线开发人员沟通。在分支上也需要设立一个点来标志这次合并,这样如果主线需要合并分支代码的时候,可以根据这个点进行新的合并,而不是合并整个分支。主线开发人员也需要设置点来标志这次合并,例如,cvs tage merged-ln_version_1 ,这样下次分支在合并主线代码的时候可以cvs update -j merged-ln_version_1 -j HEAD ,这样防止了分支重复合并主线上的代码,而只是合并最新的修改。

上面我们可以看到,一个主要规则是,当进行代码合并的时候,一定要注意沟通,合理的设置合并点。并且,合并点的名字也应该望文生义^_^。各个线上的合并工作也最好由一个人来做。如果合并点设置不当,那么分支带来的好处可能就会打折扣。并且如果管理的不好,整个项目可能会很乱,产生意大利面条式的分支^_^。

上面,我大概描述了一些CVS中的分支功能,我表达能力有限,可能表达的不是很清楚,还望大家见凉。如果感兴趣,可以详细参考一下各个方面资料。但重要的是idea吗,对吧,我这里仍了一块石子^_^。我想直到今天,我才把CVS这把长剑拔了出来,但只是拔了出来,要想使出独孤九剑,还需要苦练心法才行...。
  

CVS版本管理之长剑出鞘

软件行业有一个关于软件使用的“28”或是什么“37”原则的。也不知道是那位老大总结的,但是真的很准确。我们一直用CVS对代码进行管理,可我想说的是,我一直就使用CVS里最最基本的部分。cvs co,c...
  • zblue78
  • zblue78
  • 2004年10月29日 11:04
  • 1106

版本控制工具SVN与CVS两者间的比较

 早在2000 年,CollabNet, Inc. (http://www.collab.net) 开始寻找CVS 替代产品的开发人员,CollabNet 提供了一个协作软件套件CEE (Collab...
  • Lechie
  • Lechie
  • 2010年09月10日 20:55
  • 2698

CVS:版本控制的开放标准

译者按:CVS,即并发版本系统(Concurrent Versions System),是占统治地位的版本控制系统。它具有开放源码、“网络透明”(Network-transparent)的特点,从个体...
  • zblue78
  • zblue78
  • 2004年10月29日 11:08
  • 2700

CVS版本控制器介绍

CVS版本控制器介绍 一、为什么要学习CVS? 1、项目开发靠的是一个团队的能力,很少有大中型项目是由个人完成的。对于团队开发来讲---能控制每个人的分工和权限,可以让多个人同时编辑同一份代码,并...
  • xueshuangshuang123
  • xueshuangshuang123
  • 2012年12月06日 17:27
  • 7150

【版本控制】git,svn,cvs 粗略比较

版本控制已经有很多年历史了,也出现了很多版本控制解决方案,但是有一些因为安全性低、不支持跨平台、不支持并发修改而逐渐淡出了人们的视野。这篇文章就来比较一下时下最火的三个版本控制工具:git,svn,c...
  • qq_28602957
  • qq_28602957
  • 2017年06月15日 20:09
  • 882

SVN和CVS中对差分代码重新打tag的操作

  代码资源管理工具来说,CVS和SVN是最为典型的。最近SVN的表现更为抢眼。  在工程管理中,代码发生变化的时候,可以需要把变化内容反映到最新版本和之前的一些tag版本。就是对于差分代码重新打ta...
  • hantiannan
  • hantiannan
  • 2009年08月15日 12:35
  • 2391

linux下配置cvs服务器

一 CVS服务器的安装: 1。查看你的操作系统上是否安装了CVS:#> rpm -qa|grep cvs 如果没有安装你可以在Redhat 第2张光盘上找到,另外你也可以在网上下载到最新的rpm包。很...
  • baobao8505
  • baobao8505
  • 2006年08月29日 16:55
  • 5259

CVS版本管理

CVS版本管理之长剑出鞘我参与的项目release好一段时间了,这期间经历了市场血与火的洗礼...。做应用软件的就是这样,你一定会碰到不同用户的不同需求,你需要为其定制开发。好,当有A省的用户有特殊的...
  • yongzhewuwei_2008
  • yongzhewuwei_2008
  • 2007年09月06日 10:49
  • 658

从CVS迁移到SVN

  最近想把公司原来用CVS管理的代码迁移到SVN中去。主要是因为SVN是整个版本库共享一个版本历史,比较方便完整的Checkout某个工程。而且SVN还有一些CVS所不具有的良好特性,比如支持对目录...
  • jamesfancy
  • jamesfancy
  • 2006年12月26日 23:55
  • 3660

LINUX环境下使用CVS

偶也是首次使用CVS,如有错误,欢迎指正. CVS的源码在ftp://202.113.29.4/pub1/unix/cvs/ 其文档在ftp://202.113.29.4/doc/cvs/ CVS是一...
  • jiahehao
  • jiahehao
  • 2008年04月04日 10:30
  • 4401
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CVS版本管理之长剑出鞘
举报原因:
原因补充:

(最多只允许输入30个字)