Chinaunix首页 | 论坛 | 博客
  • 博客访问: 648902
  • 博文数量: 107
  • 博客积分: 4135
  • 博客等级: 上校
  • 技术积分: 1182
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-06 16:01
文章分类

全部博文(107)

文章存档

2020年(2)

2012年(5)

2011年(6)

2010年(23)

2009年(17)

2008年(35)

2007年(19)

我的朋友

分类: 项目管理

2008-04-22 10:53:06

 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文件:
    2:建立了cvs用户组

groupadd cvs



3.建立cvs组的cvsroot用户和所属的目录

useradd -g cvs -G cvs -d/home/cvsroot cvsroot



4:为cvsroot用户添加密码

passwd cvsroot



5:改变/home/cvsroot的目录属性

chmod 775 /home/cvsroot



6:初始化cvs源码库,此操作生成目录/home/cvsroot/CVSROOT,其下为一些初始化文件

cvs -d/home/cvsroot init



7:创建可以登陆cvs服务的用户及密码,需要创建文件passwd

vi /home/cvsroot/CVSROOT/passwd



文件内容如下:

steven:xxxxx:cvsroot

8.xxxxxx为密码,由以下文件生成: vi /home/cvsroot/passwdgen.pl 文件内容:

#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift; my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}\n";



9.如果需要密码为:some,则敲入: passwdgen.pl "some" 回车即可得到加密密码,用其替换passwd文件中的xxxxxx

10.加入cvs服务(我的redhath9缺省就有cvs服务,所以不用加)

vi /etc/services
cvspserver 2401/tcp #pserver cvs service
cvspserver 2401/udp #pserver cvs service



11.cvs服务由inted来唤起,因此需要改动inetd提供的服务,我的redhat使用的是inetd 方式则在文件/etc/inetd.conf中加入如下的内容:cvspserver stream tcp nowait root /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver

我的redhat9使用的是xinetd方式,所以在xinetd.d目录下添加需要启动的服务:

cd /etc/xinetd.d
vi cvspserver



文件内容:

service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
log_on_failure += USERID
}



12.重新启动inetd或者xinetd:

/etc/rc.d/init.d/xinetd restart



13.检查cvspserver服务是否已经启动

netstat -l |grep cvspserver



结果如下:

tcp 0 0 *:cvspserver *:* LISTEN



以上结果全部通过,但是在我的客户机(redhat9)上执行

cvs -d :pserver:steven@192.168.211.72:/home/cvsroot login



输入密码后,返回connection confuse信息

补:

cvs -d :pserver:steven@192.168.211.72:/home/cvsroot login



输入密码后,没有收到任何消息,即表示成功

^_^ no news is a good news!!

在客户端,设置环境变量如下:

export CVS_RSH=ssh
export CVSROOT=:pserver:username@ip:/home/cvsroot



你可以

echo $CVS_RSH
ssh
echo $CVSROOT
:pserver:username@ip:/home/cvsroot



这样你在客户端就可以直接输入 cvs login登陆了

其它操作都可以直接cvs command 了 
    然后输入相应的口令就可以登录到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模块了,然后,我们可以把这个测试项目的文件删除,试验如何从仓库获取文件这会在后面的客户端文章进行说明。
(注:本小节主要引用自何伟平的“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可以从地址下载到,也可以在 上下载到最新的或其它版本的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进行系统开发或其它文档的版本管理与控制。
阅读(419) | 评论(0) | 转发(0) |
0

上一篇:vb 备份文件

下一篇:VSS教程

给主人留下些什么吧!~~