技术文章
:: 从TeamSource到WinCVS
作 者: Musicwind
版 本: 1.0
日 期: 2004-7-2
■ 修订人
修订描述
修订日期
审核人
Musicwind
o 创建此文档;
o Musicwind保留修改、出版的权利。
2004-7-2
1 遥想TeamSource当年 工作之后使用的第一个版本管理工具便是TeamSource。因为它是Delphi安装包自带的,因此顺手就拿来用了。先是使用delphi 5.0下的那个版本,后来从delphi 6.0的安装包发现了更新的版本,即build 6.0.0.0,于是就一直用它,用了快3年。
那时候用TeamSource,不管文档、代码、程序、rar,只要是文件,就一股脑儿往TeamSource里面扔。搞得存放teamsource的硬盘都快吃不消了。
用teamsource最不方便的就是不稳定——不是出现异常要退出,就是让我无缘无故地丢数据,或者是因为几个客户端、服务端时间不同步导致版本错乱。唉!
就在数月以前,迫于种种情势,我们终于放弃了teamsource的使用,代之以cvs——我们在一台win2000 server上安装了cvsNt,然后在客户端使用wincvs。
有句话说,没有功劳也有苦劳。我们对Teamsource的功能作用以及存在的问题作个小小的总结,也算是对它的一丝缅怀吧!
1.1 功能和使用 TeamSource的功能:
n 允许CheckIn和CheckOut,支持文件不同版本的存放;
n 本地和远程差异的比较功能(内置一个还算方便的源代码比较工具,只是字体有些难看);
n 有新的文件被CheckIn,可以发送邮件通知;
n 可以根据文件的扩展名过滤待处理的文件;
n 整个工程的历史日志查看(记录对服务端的动作,比如checkin,删除等操作);
n 提供两个视图,远程和本地。通过远程视图,直接查看并访问远端服务器上文件的内容;在本底视图上,可以进行checkin、checkout、delete、remove等操作。
n 可以在远程视图中设定文件的当前使用版本;
TeamSource的部署:
n 简单方便,依赖操作系统的网络文件共享,不需要服务端;
n 各用户仅需要安装TeamSource程序,并通过设置相同的工程文件即可进行版本管理;
TeamSource的技术实现:
n 借助于网络的文件共享,并通过一个lock.dat来控制锁定;
n 文件的各个版本经过压缩存储在.z文件中;
1.2 挥泪告别 TeamSource的问题:
n 采用大锁,同一时刻仅有一个人进行checkin,不支持多个人同时分目录checkin;
n 程序不稳定,经常出现access violation的错误——这是第一大罪状!况且该系列的TeamSource已经不做升级!(好像有新的TeamSource for web/.net?但是从来没有见过)
n 不支持版本的分支(可能是我孤陋寡闻也不一定);
n 不支持版本标签,不支持基线管理。只能依赖于时间才能将一个工程中的若干文件串在一起;
n 远程视图下:目录的include,exclude的设置无法在子目录中生效,必须手工进行设置;
n 由于目录的include以及exclude问题,容易造成文件的无法check in,即通过在本地视图中刷新但检测不到需要check in 的文件——此是第二大罪状;因此TeamSource是将第一次checkin时候的所有文件的扩展名作为include的内容,后续该目录新增其他类型文件时,不能自动检测,比如手工添加扩展名或直接增加一个*.*。
n ……,一言难尽啊!
2 迈入CVS阵营 2.1 概述 CVS是跨平台的并行版本管理工具。部署时分为服务端和客户端。服务端支持unix,linux,windows等多个平台。在windows下,客户端是一个控制台程序。这里的WinCVS就是对cvs进行了封装之后,具有良好的用户界面的cvs客户端。
以下主要谈谈teamsource里面一些概念和功能在wincvs里面的体现,以帮助原来teamsource的使用者更快地熟悉和掌握wincvs的使用(以wincvs 1.3.17.2 beta 17 build 2为例)。
由于使用时间不长,因此以下内容必存在诸多疏漏和错误之处,请不吝指正。
2.2 使用之对比 请允许我使用teamsource使用者的惯性思维来理解cvs(惭愧的是,到目前为止,我也仅仅会使用这么点功能——虽然学到这些已经让我经历了阵痛)。
序号
类别
内容
TeamSource
WinCVS
1.
基本概念和术语
Do it和commit
Teamsource支持两阶段提交,即先对相关的文件进行标记(copy, checkin, merge, delete from local, remove from project),然后使用“do it”执行之。
Wincvs采用类似做法。对于本地文件可以有remove和add两类操作,之后进行commit。
采用update功能实现teamsource的类似功能。
2.
基本概念和术语
刷新
本地视图,refresh功能
Query Update功能
3.
操作
把本地新增的诸多目录和文件提交到服务端
在本地视图中,选择refresh;之后teamsource会在右边的“recommented changes to remote project”栏中提示待提交的文件。此时选中所有文件,点击右键check in或“do it”一次性提交。
选择所在的目录,注意将过滤器设置为查看修改和更新的状态。并将flat mode打开。此时wincvs将在指定目录中搜索符合条件的文件,并在工作区中以相应图标进行显示。
根据不同目录分批选择相关文件(当操作对象超过一个目录时,相关按钮变灰),然后”add”或“add binary”或”add unicode’进行添加。
然后一次性多选所有modified的文件,进行commit。
4.
操作
修改本地文件后,更新
在本地视图中刷新,然后选择文件,check in即可。
选择文件所在的目录,会发现该文件已经被标记为modified,此时选中文件,commit即可。
5.
操作
下载服务端的最新版本
能自动根据远端的目录结构创建本地目录。
下载服务端版本后,本地冲突的版本随即丢失(被覆盖)。
不能自动根据远端目录结构创建本地目录。需在update 操作弹出的options 窗口中打开“create missing directory …”选项。
下载服务端版本后,wincvs自动将本地变化的版本另存为带#的文件名。
6.
操作
放弃本地更改
方案一:删除本地文件,然后从服务端重新获取文件;
方案二:放弃checkin操作,将相关文件移动至“recommened changes to local project”栏中,并执行“copy”操作。
选中相关文件,执行update,在options中打开“get clean copy”选项,然后确定。
手工删除cvs自动另存的本地备份文件(选中后,按del键)。
2.3 常见问题之解决 n Waiting for lock
可能原因:其他人正在commit过程中,强制退出?
解决办法:登录cvs服务端的计算机,进入cvsroot/cvsroot目录,删除以“#cvs.lock”,“#cvs.rfl”,“#cvs.wfl”打头的文件。不过,做这些操作前,一定要确认的确没有人在执行cvs操作,否则可能会带来不可预知的后果(来源于《cvs和Nightly Build技术》,作者:杨锦方等,清华大学出版社出版)。
n Commit之后还是修改状态,但是命令执行的结果为0
可能原因:文件时间变化,但内容未变化
解决办法:强制checkin,在commit 窗口的option中将“force commit”打勾,如图:
n 自己是用户A,但是commit操作却提示无法使用另一个用户名通过身份验证?
可能原因:从另一个同事(用户)那里直接复制了某个目录里的文件,并且尝试commit该目录下的某个文件。由于cvs会自动在名为cvs的隐藏目录的root文件中记录用户名,因此导致登录错误。
解决办法:打开该文件所在目录的同级cvs目录(先打开windows的查看选项,设置允许查看隐藏的目录),更改root文件中的用户名和cvs所用的username一致。
n 明明本地改过的文件,确无法Add?
可能原因:其他用户在你之前刚刚commit了该文件的一个版本;
解决办法:重新update。
[文终]