一个产品在其生命周期过程中会存在很多版本,每发布一个Release版,都需要创建一个新的分支,用来维护市场反馈或者修复Bug。
通常来说,分支中做的所有变化,最终都需要合并回Trunk。一般的做法是定期地将分支中的更新合并回Trunk中,但是它需要一些额外工作(比如需要记录Trunk中更新到了分支的哪个版本,以便当分支有新的改动时继续合并到Trunk中),随着时间的增长以及项目范围的扩大,很容易出现疏漏,造成混乱。
有没有更好的方法呢?回答是当然。
本文要介绍的自动提醒的方法主要是基于tag的思想,主要分为两部分工作:
第一步,在创建分支的时候,除了分支本身,另外再创建基于该分支版本的tag,该tag是用来判断版本更新的基准。
#假设基于TRUNK_1_5创建目录Util的分支
cvs rtag -b -r TRUNK_1_5 BR_TEST Util
cvs rtag -r TRUNK_1_5 MERGE_TEST Util
这样,在对分支进行改动时,可以定期将分支的版本与tag的版本做比较,若分支的版本高于tag的版本,则提示存在未合并到Trunk的版本信息。
举例来说明,假设基于Trunk中Util目录的1.5版本创建了一个名为BR_TEST的分支以及一个名为MERGE_TEST的tag。
接下来,对BR_TEST分支中的file1.cpp文件进行三次改动,很明显,该文件的最新版本号为1.5.1.3;而此时在MERGE_TEST中,file1.cpp的版本仍然为最初的1.5;通过对比,就会发现需要将1.5.1.1~1.5.1.3之间的版本合并到Trunk。
提示信息参考如下:
Util/file1.cpp
revision 1.5.1.3
Fixed bug.
----------------------------
revision 1.5.1.2
Function updated.
----------------------------
revision 1.5.1.1
Added new function.
第二步,在将分支版本的改变合并到Trunk之后,必须更新tag中的版本,以作为新的基准。
cvs up -kk -jMERGE_TEST -jBR_TEST file1.cpp
cvs tag -F -rBR_TEST MERGE_TEST file1.cpp
还是上面那个例子,先是将BR_TEST分支中的改动合并到Trunk中,然后,更新MERGE_TEST中的版本为1.5.1.3。