Windows下CVS的使用

grantchang 2004-09-09 10:08:04
从VSS到CVS

为什么要使用CVS
* CVS支持真正的Client/Server模式,也支持Client/File模式,VSS仅支持Client/File模式。所以CVS可以在Internet上发布文件,而VSS只能可以工作在局域网上。

* CVS支持UNIX和Windows平台。VSS仅支持windows平台。

在Windows平台配置CVS pserver
首先在http://www.cvsnt.org/wiki下载最新的CVSNT的安装文件,然后依照屏幕提述安装。CVSNT把CVS server配置成Windows的服务:CVSNT和CVS Locking Service。安装成功之后,这两个服务应该都已经启动。

设定CVS库
打开“开始/程序/CVSNT/Service control panel”,并打开Repositories选项页。
选择Add,这是出现Add对话框。可以选择…来定位cvs库的位置,比如“C:/cvsroot”。选择OK。

设定登录和其他事项
选择Advanced选项卡。在“Use local users for pserver authentication instead of domain users”上打勾,表示可用本地用户登录。在“Pretend to be a Unix CVS version”上打勾,这可以和Unix上的CVS pserver保持兼容。


这样,整个server就配置好了,可以重起这两个服务使配置更改生效。

测试
在命令行上面输入以下语句:

cvs –d:pserver:127.0.0.1:2401/cvsroot login

其中的“/cvsroot”是前面设定的Repositories。为了符合UNIX的命名习惯,原来的“C:/cvsroot”映射成了“/cvsroot”。根据屏幕提示输入密码,如果没有错误,那么恭喜,你的CVS server启动成功。你也可以在一台UNIX机器上输入以上命令(记得把127.0.0.1改成CVS服务器的IP)。

在VC.net上集成CVS
目前有一个工具可以把CVS集成到VC.net,但不是免费的。一个license要$19,是个俄罗斯的公司开发的。如果想要尝试一下,可以到http://www.pushok.com/soft_download.php下载CVS_SCC_Proxy评估版,30天的使用期。不过很有意思的是,到期之后可以换个名再去申请一个license。这和免费好像没有多大差别。

安装
下载完毕按照屏幕提示安装即可。安装完成之后需要注册,申请一个评估的license就可以用起来了.

安装完成之后,VC.net的默认的源代码管理就是CVS了,如果你想恢复到VSS,可选择“开始/程序/PushOK Software/CVSSCC/Switch SCC”。然后就在系统的右下侧的系统托盘里右键点击图标,出现下面的菜单。选择“Microsoft Visual SourceSafe”即可恢复。


将VC.net解决方案添加到CVS
如果已经有一个VC.net解决方案,可以选择更改源代码设置。

选择“绑定”之后,系统弹出绑定对话框。

如果使用上面建立的CVS pserver,在CVSROOT填上:pserver:user@127.0.0.1:2401/cvsroot,把“user”换成你的本地帐户。填完之后,可以点击旁边的Check按钮检查一下有效性。点击Login按钮登录一下,看看是否成功。

在CVS MODULE里填上模块的名称,这可以是一个路径,中间用“/”隔开。填完之后Check一下是否存在,不存在的话,点击Create创建一个。这时可以点击CVS MODULE旁边的…按钮,察看一下CVS的结构。


在VC.net中使用
CVS_SCC_Proxy遵循微软的SCC标准,使用起来和VSS差别不大。


和资源管理器集成
TortoiseCVS实现了和资源管理器的集成,而且是个开源软件。

特性
如果一个文件或文件夹受CVS管理,会在资源管理器里显示为绿色。在上面点击右键,会出现有关CVS的菜单。TortoiseCVS在上面加了有关CVS的菜单。

安装
可在http://sourceforge.net/projects/tortoisecvs下载TortoiseCVS的最新版本。按照屏幕提示安装即可。另外, TortoiseCVS还有一个CVS的VC.net plugin,目前正在开发中,也挺不错的,而且是免费的。有兴趣的可到http://sourceforge.net/projects/cvssccplugin下一个试试。

命令行使用CVS
常用的命令
在运行下面的命令前,需要设定了CVSROOT环境变量。比如CVSROOT=:pserver:user@172.20.9.27:2401/cvsroot,其中pserver表示连接的是一个认证服务,user代表用户名,172.20.9.27代表服务器的IP,2401代表端口号,/cvsroot表示库的位置。

如果没有设定CVSROOT环境变量,需要在下面的每个命令中在cvs和命令字之间加上-d参数,如:

cvs –d :pserver:user@172.20.9.27:2401/cvsroot login

下面的命令在TortoiseCVS里都有相应的菜单,使用起来更加方便。

登录与注销
CVS pserver需要登录,所以在做任何操作之前,必须登录服务器。

cvs login

登录成功之后,cvs会在$HOME/.cvspass(UNIX)或注册表(NT)中添加登录信息(其实就是用户名和散列处理过的密码,进行下面的操作的时候就用这个散列密码认证)。

注销的时候使用

cvs logout

cvs会把登录的信息删去。

创建项目
cvs import –m “这是注释” proj/web redhat linux

-m “这是注释” 是注释

proj/web是CVS库中的目录

redhat和linux分别是vendor tag(厂商标记)和release tag(发布标记),我也不知道什么意思,但是既然import命令需要他们,就把他们加上。

这个命令就把web项目加到了CVS库中的proj/web目录。

签出项目
在一个工作目录,运行下面的命令:

cvs checkout –d proj/web

-d: :pserver:user@127.0.0.1:/cvsroot 指定CVS库的位置(127.0.0.1:/cvsroot)、认证方法(pserver)、用户名(user);

checkout 表示签出命令

-d web 表示要放到web目录

proj/web 表示要签出的项目在库中的位置

这个命令把CVS库中的Develop/iES-CCS/web目录签出到了web目录。

更新项目
在web目录运行下面的命令

cvs update

cvs会更新每个文件的状态,显示哪些文件作了改变。和”Get latest version”,如果库中的文件有了变化,cvs会把变化合并到本地文件。如果出现冲突,比如同时编辑了一个行代码,cvs会在发生冲突的文件里面标出冲突的地方,并发出警告。



cvs server: Updating .

RCS file: /cvsroot/proj/web/main.cpp,v

retrieving revision 1.1

retrieving revision 1.2

Merging differences between 1.1 and 1.2 into main.cpp

rcsmerge: warning: conflicts during merge

cvs server: conflicts found in main.cpp

C main.cpp



这时,main.cpp文件中发生冲突的地方会有一个标记



<<<<<<< main.cpp

// 当前的版本

=======

// 库中的版本

>>>>>>> 1.2

解决冲突之后,就可以运行一下update:



cvs server: Updating .

M main.cpp

提交更改
在web目录运行下面的命令

cvs commit

和checkin差不多。在提交更改之前,需要运行一下update更新状态。如果不更新,本地文件和库中的文件不一致的话,命令就会失败,提示更新状态:

cvs commit: Examining .

cvs server: Up-to-date check failed for `main.cpp'

cvs [server aborted]: correct above errors first!

释放签出
如果更改完成,想删掉本地文件,用一个安全的方法就是释放签出命令。在web的父目录下运行下面的命令:

cvs release –d web

cvs会检查有没有未提交的更改,然后提示是否真的要删除目录:

You have [1] altered files in this repository.

Are you sure you want to release (and delete) directory `web':

常用过程
首先签出项目,然后做一些更改。如果觉得可以了,就可以更新文件,看看有没有冲突。有冲突就解决冲突。然后提交更改。最后释放签出。

CVS 库的存储结构
VSS可以显示库的结构,CVS没有这样的工具。但是,由于CVS存放的结构和库的结构是一致的,所以可以通过浏览CVS的目录结构来查看库的结构。下面是一个库的存储结构。

/usr
|
+--local
| |
| +--cvsroot
| | |
| | +--CVSROOT
| (administrative files)
|
+--gnu
| |
| +--diff
| | (source code to gnu diff)
| |
| +--rcs
| | (source code to rcs)
| |
| +--cvsnt
| (source code to cvsnt)
|
+--yoyodyne
|
+--tc
| |
| +--man
| |
| +--testing
|
+--(other Yoyodyne software)
库中的文件既保存着文件的内容,又保存着文件的修订历史,文件名是在原有的文件名后面加上,v的后缀。

$CVSROOT
|
+--yoyodyne
| |
| +--tc
| | |
+--Makefile,v
+--backend.c,v
+--driver.c,v
+--frontend.c,v
+--parser.c,v
+--man
| |
| +--tc.1,v
|
+--testing
|
+--testpgm.t,v
+--test2.t,v
CVS的访问控制是通过操作系统提供的安全访问控制机制实现的。对库中的目录设定不同的访问控制,就能控制用户对库的访问。如果设定web只能被user修改,那么除了user以外的用户都不能提交更改。
...全文
355 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
m_kiss 2004-09-13
  • 打赏
  • 举报
回复
up
warton 2004-09-11
  • 打赏
  • 举报
回复
up
smallcrocodile 2004-09-10
  • 打赏
  • 举报
回复
好帖子!
你值得珍藏!
limlzm 2004-09-09
  • 打赏
  • 举报
回复
老要输入密码,麻烦,还是在linux下使用方便

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧