CVS的update和commit, VSS是get_lastest_version和check in
对应VSS的check out/undo check out的CVS里是edit和unedit
在CVS中,标记自动更新功能缺省是打开的,这样也带来一个潜在的问题,是不用-kb方式添加binary文件的话在cvs自动更新时可能会导致文件失效。
Virsual SourceSafe中这个功能称之为Keyword Explaination,缺省是关闭的,需要通过OPITION打开,并指定需要进行源文件关键词扫描的类型:*.txt,*.java,*.html...
对于Virsual SourceSafe和CVS都通用的TAG有:
$Header$
$Author$
$Date$
$Revision$
尽量使用通用的关键词保证代码在CVS和VSS都能方便的跟踪。
WinCVS
======
下载:
cvs Windows客户端:目前稳定版本为1.2
http://www.wincvs.org/
ssh Windows客户端
http://www.networksimplicity.com/openssh/
安装好以上2个软件以后:
WinCVS客户端的admin==>preference设置
1 在general选单里
设置CVSROOT: username@192.168.0.123:/home/cvsroot
设置Authorization: 选择SSH server
2 Port选单里
钩上:check for alternate rsh name
并设置ssh.exe的路径,缺省是装在 C:Program FilesNetworkSimplicitysshssh.exe
然后可以使用WinCVS进行cvs操作了,所有操作都会跳出命令行窗口要求你输入服务器端的认证密码。
当然,如果你觉得这样很烦的话,还有一个办法是生成一个没有密码的公钥/私钥对,并设置CVS使用基于公钥/私钥的SSH认证(在general选单里)。
可以选择的diff工具:examdiff
下载:
http://www.prestosoft.com/examdiff/examdiff.htm
还是在WinCVS菜单admin==>preference的WinCVS选单里
选上:Externel diff program
并设置diff工具的路径,比如:C:Program Filesed16iExamDiff.exe
在对文件进行版本diff时,第一次需要将窗口右下角的use externel diff选上。
基于CVS的小组开发环境搭建
========================
作为一个小组级的开发环境,版本控制系统和BUG跟踪系统等都涉及到用户认证部分。如何方便的将这些系统集成起来是一个非常有趣的事情,毕竟我们不能指望Linux下有像Source Offsite那样集成度很高的版本控制/BUG跟踪集成系统。
我个人是很反对使用pserver模式的远程用户认证的,但如果大部分组员使用WINDOWS客户端进行开发的话,总体来说使用CVSROOT/passwd认证还是很难避免的,但CVS用户的管理比较麻烦。本来我打算自己用perl写一个管理界面的,直到我发现了CVSTrac, 一个基于WEB界面的BUG跟踪系统,它外挂在CVS系统上,而且包括了WEB界面的CVSROOT/passwd文件的管理,甚至还集成了WIKIWIKI功能。
这里首先说一下CVS的pserver模式下的用户认证,CVS的用户认证服务是基于inetd中的:
cvspserver stream tcp nowait nobody /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver
一般在2401端口
CVS用户数据库是基于CVSROOT/passwd文件,文件格式:
[username]:[crypt_password]:[mapping_system_user]
由于密码都用的是UNIX标准的CRYPT加密,这个passwd文件的格式基本上是apache的htpasswd格式的扩展(比APACHE的PASSWD文件多一个系统用户映射字段),所以这个文件简单的方法可以用
apache/bin/htpasswd -b myname mypassword
创建。注意:通过htpasswd创建出来的文件会没有映射系统用户的字段
例如:
new:geBvosup/zKl2
setup:aISQuNAAoY3qw
test:hwEpz/BX.rEDU
映射系统用户的目的在于:你可以创建一个专门的CVS服务帐号,比如叫cvs,并将/home/cvsroot目录下的所有权限赋予这个用户,然后在passwd文件里创建不同的开发用户帐号,但开发用户帐号后的文件读写权限都映射为cvs用户,避免了在SSH模式下多个开发用户新建文件后的对于其他用户的文件读写权限问题。
进一步的,你可以将用户分别映射到2组用户上,利用2个用户的权限设置,避免2个项目组的文件互相访问。
new:geBvosup/zKl2:proj1
setup:aISQuNAAoY3qw:proj2
test:hwEpz/BX.rEDU:proj1
CVSTrac很好的解决了CVSROOT/passwd的管理问题,而且包含了BUG跟踪报告系统和集成WIKIWIKI交流功能等,使用的CGI方式的安装,并且基于GNU Public License:
安装过程
下载:http://www.cvstrac.org解包,复制成/usr/bin/cvstrac
在已经装好的CVS服务器上(假设CVS库已经使用cvs init初始化过在/home/cvsroot里),运行一下
cvstrac init /home/cvsroot myproj
运行后,/home/cvsroot里会有一个缺省的myproj.db库
在apche/cgi-bin目录中创建如下脚本cvstrac:
#!/bin/sh
/usr/bin/cvstrac cgi /home/cvsroot
设置cvstrac可执行。
从http://cvs.server.address/cgi-bin/cvstrac/myproj进入管理界面,缺省登录名:setup 密码 setup
在inetd里加入cvspserver服务:
cvspserver stream tcp nowait nobody /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver
注意:这里的用户设置成nobody目的是和apache的运行用户一致,并且必须让这个这个用户对/home/cvsroot/下的CVSROOT/passwd和cvstrac初始化生成的myproj.db有读写权限。
一般用户还可以从:
http://cvs.server.address/cgi-bin/cvstrac/myproj
修改登录密码,记录BUG报告等,更多使用细节可以在使用中慢慢了解。
对于前面提到的WinCVS改用passwd file on server side模式登录可以了。
总结:
利用cvs + (WinCVS/cvsweb/cvstrac),构成了一个相对完善的跨平台工作组开发环境。
相关资源:
CVS HOME:
http://www.cvshome.org
CVS FAQ:
http://www.loria.fr/~molli/cvs-index.html
相关网站:
http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/
CVS 免费书:
http://cvsbook.red-bean.com/
CVS 命令的速查卡片:
http://www.refcards.com/about/cvs.html
WinCVS:
http://www.wincvs.org
CVSTrac: A Web-Based Bug And Patch-Set Tracking System For CVS
http://www.cvstrac.org