分享
 
 
 

CVS版本管理之长剑出鞘

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

软件行业有一个关于软件使用的“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这把长剑拔了出来,但只是拔了出来,要想使出独孤九剑,还需要苦练心法才行...。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有