文件归并(merge files)
正所谓,分久必合,合久必分。分支操作以后,你肯定需要重新将这些文件合并到一起,比如上面那个例子,你肯定希望在版本2.0中被修改了的错误不要在版本3.0中再出现,这个时候你就需要用到归并操作。
所谓文件归并就是将由一个文件产生的多个不同拷贝重新形成一个唯一的新的文件版本,一般都是将分支上的改变反映到主线上,所以称之为归并操作(当然还存在其他两种情况,使用multiple checkouts,某些情况下get一个文件的时候)。在文件归并过程中VSS并不能去决定文件差异的取舍,它只是将这些文件间的异同提交给你,由你自己来确定最后的文件内容。当然比较的基准就是我们前面提到的它们共同的祖先。
有两种方法可以进行归并操作,一种是默认的visual merge,另一种是manual merge。一般推荐使用前一种方法。
文件归并过程中涉及到两个概念,一个是投送者(contributor),另一个是目标(object)。投送者就是你在分支上的那些文件,目标就是你在主线上的那些文件,归并操作完成后,只有目标的内容改变,而投送者的内容保持不变。
如何实现归并操作
1. 在VSS Explorer中选择目标文件或者项目。
2. 选择SourceSafe菜单,单击Merge Branches显示Merge To对话框。
3. 在Projects框中选择投送者所在的项目名称,所以说该对话框的名称应该为Merge From,而不是Merge To。
4. 单击Merge显示Comment对话框。
5. 输入注释,点击OK。
6. 如果两者之间的差异很明显(比如一个文件比另外一个文件多出一行),系统会自动帮你决定目标文件的内容。反之,系统显示Visual Merge对话框,你可以自己决定目标文件的内容。
操作完成后,查看一下目标文件是不是变成了你希望的内容。
好啦,至此所有的工作已经完成。你可以放松一下来杯浓茶,不敢喝咖啡,怕被Sun公司控告侵权。但是中国人有个习惯,不管什么东西都喜欢分出个高低,排个名次。我记得小的时候对隋唐演义中的好汉排名津津乐道,什么第一名李元霸,第二名宇文成都等等。那好,我们也来啰嗦一下,评评VSS的功过是非。
评说VSS
在支持并行开发方面,VSS提供了大量优秀简洁的特性,但是在以下几个方面稍显不足:
1. 在进行分支操作的时候,灵活性不是很大,只能是单一地选择某个项目中的所有文件,不能进行一些自定义的设定,比如我只希望选取所有的文本文件。
2. 由于VSS中主线和分支是采用不同的项目来区分,所以很容易被混淆而且增加项目的数量,不如采取版本号来区分直观。
3. 在进行归并操作时,投送者与目标的概念很模糊,而且没有显示地提出这两个概念。
4. 由于VSS中没有版本树的概念,所以分支操作后没有一个直观形象的版本演化的感官认识,就像Rational ClearCase中那样,这样使得不能把分支和主线很好地联系在一起。
总结
本文主要讲解一些VSS使用中的高级特性,使得你能够用来应付一些比较复杂的情况。但是,VSS毕竟只是一种工具,项目配置管理的成败主要取决于项目的配置管理策略。
说明
1. 本文所有的例子都是基于Visual SourceSafe 6.0英文版,其他的版本可相应对照。
2. 关于Visual Merge对话框的详细信息,可以参考VSS的帮助文档。
3. 当然本文不准备在整体上来评价VSS,主要是从支持并行开发这个方面来说说VSS的不足之处,只要与Rational ClearCase进行对照。