软件库的备份与移动
备份软件库中的文件和备份其他文件并没有不同,但你需要一个备份工具开锁住CVS.这样,你必须先注册一个可以读取软件库的用户,打开CVS软件库, 你需要编辑`#cvs.rfl’文件.
当你想用一备份的软库,恢复原来的库时,如果原库在你备份后作过改动.CVS将报错.你必须按以下的步骤来
? 得到一个新的工作目录
? 拷贝上一次提交失败的文件(,当然不能拷贝CVS的目录文件)
? 在新目录下工作,使用cvs update 或cvs diff 等命令指出那些作过改动,在使用cvs commit 将改动保存到软件库.
你如果想移动一个软件库到其他地方也很简单.最简单的方法是将向要移动的目录创到一个新的目录中去.如果你想重新使用原来的目录的话,只能手工修改`CVS/Repository' 和 `CVS/Root',除非你精于此道,否则不建议使用.
4.2 CVS 的远程用户管理
作为一个CVS 服务器,应该满足两点.首先保证软件库有足够大的空间. 其次保证有不小于32M 的内存, 服务器为每一个连接它的用户产生两个进程,在子进程上的花销较小.但如果网络带宽不够,在父进程上的花销是巨大的.
另外一个大的花销是diff 文件,当源文件很大时,对他进行验证或检测的花销也很大.
远程用户的登录认证方式
以rsh为例行远程登录
Cvs 服务器使用rsh 允许用户连接时应该配置.rshosts ,假设在远程主机tom.exsample.com 上的用户tom 需要连接到 funame.simple.com 这个cvs 服务器上工作.应该编辑服务器端的bach 目录的.rshosts ,在其中加入
Tom.exsample.com tom
客户端可运行 rsh –l bach funame.simple.com ‘ echo @PATH
以确定自己可以连接到CVS 服务器上,并且客户应将显示的这个路径写入 .bashrc 或 cshrc (而不是.logiin 或.profile.)
除此之外,客户端还可以定义环境变量CVS_SEVER.来定义主机的位置. 在服务器端,修改/etc/ineted.conf文件,来告诉服务器,在获得特定端口的连接时,运行cvssever .这个端口号缺省值是:2041.当然为了不再每次使用时都要进行设置,可以在用户端通过定义环境变量 CVS_AUTH_PORT来使用.
如客户端的ineted 允许使用原始调用,只需在/etc/ineted.conf 文件中添加下面的句子即可 2401 stream tcp nowait root/usr/local/bin/cvs cvs –f –allow –root=/cvsroot pserver
另外还可以用- T 选项来定义缓冲目录.
—allow – root 定义了可供用户使用的软件库,如果服务器上有更多的软件库需要重新使用这个句子. 另外,内部用户可以这样定义环境变量CVSROOT
:pseve:usr@funam.simple.com:/cvsroot
其中 usr是用户名(linux系统的)funam.simple.com 是cvs 服务器,并假设 /cvsroot是软件库的目录名.远程用户可用下面的形式:
:etx:psever:usr@funam.silple.com:/cvsroot
:etx: 定义了是远程用户,其余同上.
如果客户的ineted 采用一般调用,只需在 /etc/seveice 中加入下面这一句:
cvspsever 2401/tcp
重新启动ineted 使其读取初始化文件即可.
CVS 对于用户的管理.在缺省状态下(如用telnet登陆),是和linux 系统使用同样的用户名与密码.即:只要你登陆linux 系统,就拥有 $CVSROOT的只读权限..当然,对某一软件的开发者来说必须拥有相对应目录的读写权限,才能完成源代码的升级等工作.因此,CVS 也提供了自己的用户认证体系以更加方便的管理用户.
在服务器端的$CVSROOT/CVSROOT 下可以有一个passwd 文件(可以用环境变量CVS_PASSFILE 来定义.)来记录cvs的用户信息.他采用的是和linux etc/passwd 同样的组织形式 .同样,它的passwold 也是经过linux标准加密方式的.下面是一个 passwd 的内容
anyone:
tom:xyzkue
mary:yuio:pubcvs
第一行的意思是,当用anyone 的身份登录时,不需要任何密码.即使打入空串也可以.当然在这种方式下你得到的可能只是只读权.第二行的意思是, tom 登录时需要敲入passwold.该passworld 加密后是xyzkue.以这种方式登录后.一般可以获得较高的权限.
第三行的意思是,当mary 登录时需要敲入密码.进入和系统用户相同的软件库.这样作的目的是因为.cvs 将纪录它的用户在软件库中的所有的动作.定义和系统使用者不同的身份.使用cvs.
例如;使用用户tom可以用以下的方式登录:
$cvs –d :etx:tom@funam.simple.com:/cvsroot login
(如果tom 这个用户名在远端可内部是相同的,则tom@ 还可以省略)
同时,可以使用cvs loginout 将所有的环境变量撤销.
使用GASSAPI 接入
CVS 还支持使用 GASSAPI 的TCP 直接接入.在使用安转之前,需要将CVS 重新编译以获得 GASSAPI 的支持.运用 –with –gassapi 来连接,或者用-a 选向来连接.使用GASSAPI 的认证等方式余地一种方式相同.
但在登录时.需要重新定义$CVSROOT 如:
$cvs –d :gsever:usr@cvssever.com:/cvsroot login
使用kerberos 直接连接
最简单的使用rsh 的方法如上说述.这种方法的主要特点是所有数据都通过一个额外的程序.非常费时.如果安装了kerberos.可以直接用TCP 连接.
同样CVS 需要重新编译以获得keberos的支持可用--with-krb4 来连接.这样传输的数据是没有加密的.如果要获得安全.必须在服务端和客户端都用`--enable-encryption来连接.此时,你应用通用的变量-x来要求加密.
在服务端需要编辑inetd.conf 来运行cvs kserver .客户端的缺省端口号是1999,如果想用其他端口号.需在用户端定义CVS_CLIENT_PORT
此时的登录命令应是
cvs -d :kserver:faun.example.org:/usr/local/cvsroot checkout foo
用fork连接
用这方式,可以通过远程协议连接本地硬盘的软件库.换句话说,他能和:local:有相同的功能用这种方式的登录命令是
cvs -d :fork:/usr/local/cvsroot login
和用:etx:一样.缺省的主机名是cvs
三、cvs服务器架与应用实例
1.服务器安装配置
假设目前有一工作项目,需要用cvs 来管理员码.这个开发组为内部3人,器ip 分别是:192.168..1.2(用户名t1), 192.168.1.3)(用户名时t3),193.168.1.3(用户名t3),远程用户一人,其主机是 tom.example.com.(用户名是tom)
如果你已经安装了cvs,建立一cvs 主机为 cvs.exam.org的服务器非常简单.步骤大致如下:
1.1 以root 身份登录.建立软件库(repository)
$export CVSROOT=/cvsroot
$mkdir /cvsroot
$cd /cvsroot
$cvs init
1.2设置执行权限
$chmod /cvsroot/CVSROOT 744 (/ccvsroo/CVSOOT设置为只读)
$chmod /cvsroot 764 组号 (/cvsroot 对开发组可读写)
修改文件以利于其他人使用,因为开发组人员是系统用户,所以在这里用系统的用户名和password是比较好的.先编辑.rhosts件如下:
tom.example.com. tom
修改服务器上的 /etc/inetd.conf文件,加入如下的句子
2401 stream tcp nowait root /usr/local/bin/cvs cvs -f --allow-root=/usr/cvsroot pserver
这样一来,一个基本的cvs 服务器就建好了.
我们这里只是提供了一个基本的应用.cvs 真正的细节应用非常复杂.我们这里只进行一些抛砖引玉的介绍.与兴趣的朋友可以细读它的安装文档.
2.应用实例
(使用主机上的cvs 系统,可以telnet 到主机上,然后使用,和本机使用没什么差别,所以本文一直不提)
假设上例中的tom 想使用 cvs 主机上的cvs系统以和大家协作开发.首先它营配置自己的一些环境变量.首先编辑/etc/services'加入:
cvspserver 2401/tcp
然后在.profile 文件中加入如下代码
CVSROOT=:etx:psever:tom@cvs.exam.org:/cvsroot
Export CVSROOT
这样他便可以使用$cvs login 来登录了.下面我们便以tom 的具体使用为例子讲一下cvs 的应用.和其他linux 命令一样.cvs 也有大量的参数.我么将在下一节做一个列表.
Tom 在/usr/test 目录下有如下文件
Ecample.c exampl2.c tes1.c test2.c utimel.c tty.c
如果想在软件库建立自己的目录
$cd /usr/test
~test$ cvs import –m “tom first creation” tomdir tom tomwork
N tomdit/example.c
N tomdit/exampl2.c
N tomdir/test1.c
N tomdir/test2.c
N tomdir/utmel.c
N tomdit/tty.c
No conflicts creat by this import
命令说明 import 提交命令 –m 后加描述.tom 发行商 tomwork 是发行标号.如果提示CVSROOT 不对,可以用- -d 加CVSROOT
注:一切cvs 的命令 可以用 cvs command –H 来获得帮助. 这时服务器端的/cvs 目录下多了一个 tomdir 子目录.内容下:
example.c,v exampl2.c,v test1.c,v test2.c,v tty.c,v utimel.c,v
至此首次提交完成.
这样便是一不小心删除了test 目录也不用担心.使用如下命令,可从软件库中检出源文件的备份
$/cd usr
`usr$/cvs checkout test tomdir-r 1.1
U test/exsample.c
U test/exampl1.c
U test/test1.c
U test/test2.c
U test/tty.c
U test/ulnem.c
cvs checkout命令缺省是得到最新版本.我们也可以得到某一个老版本,此命令是将tomdir的1.1版的代码取出. 恢复后test 目录增加了一个CVS 目录是用来管理的,以便在你下一次提交或修改的时候,和服务器上的管理文件相接口,保证版本好.这个例子非常小,现实中工程非常可能文件非常多,这样可以先恢复 CVSROOT 的模块
~usr/$cvs checkout CVSROOT/mouldes
~/usr/$vi CVSROOT/mouldes 编辑模块名,如我们在文件尾加上
src project/src
print project/src/print
cvs commit
以后我们就可以用cvs checkout print来代替
cvs checkout project/src/print
编辑完后即可以提交文件
~usr/$cvs commit –m “edit of mouldes name” CVSROOT/mould除了可以恢复整个目录后也可以恢复单个文件或模块
~usr/test/$cvs checkout –m “newer file “ tty.c
在恢复了文件以后, tom 便可以使用各种编辑器,对源文件进行修改,修改完成以后就可以提交它的工作成果了
~/usr/cvs commit test tomdir.
这样,tom 便完成了一次源文件的升级.其他的同理可得