0°

Linux常用工具命令之CVS

12.1 服务器设置

CVS环境初始化
决定主repository将要创建和重置的cvs根目录.比如/usr/local/cvs(根):


$ mkdir -p /usr/local/cvs
$ setenv CVSROOT /usr/local/cvs	//设置CVSROOT环境变量(本地)
$ cvs init	//创建所有初始化CVS配置文件
$ cd /root
$ cvs checkout CVSROOT	//签出配置文件来修改他们
$ cd CVSROOT

$ cvs commit config

cat >> writers	//创建writers文件(也可为readers)

colin
^D //使用[Control][D]退出编辑


$ cvs add writers	//添加文件writers进repository
$ cvs edit checkoutlist
$ cat >> checkoutlist

writers
^D //使用[Control][D]退出编辑


$ cvs commit	//提交所有配置更改

添加一个readers文件,如果你要区分读写权限的话.注意:不要在主cvs中直接编辑文件,而应该签出要编辑的文件,修改完成后再签入.我们所做的文件writers用来定义可写权限.

下面有三种流行的方式去访问CVS.前两个不需要任何进一步的配置.看CVSROOT部分的实例了解如何使用它们:
1. 直接本的访问文件系统.用户需要有足够的权限来直接访问CVS,除了要登录到操作系统,没有进一步的验证.然而这仅对本地repository才有用.
2. 使用ext协议通过ssh来远程访问.任何有ssh shell账户和在CVS服务器上可读写权限的都可直接使用ext协议通过ssh来访问CVS,而不需要任何额外的隧道.没有服务器来处理运行在CVS上的验证工作.ssh登录会去验证.
3. 用pserver来远程访问.这是对于有较大用户量的首选方法,用户由CVS的pserver通过一个专门的密码数据库来验证,因此不需要本地用户帐户.这种设置在下面会有说明.

用inetd设置网络
如果不需要网络访问,CVS可以运行于本地.对于远程访问,在/etc/inetd.conf(Suse为/etc/xinetd.d/cvs)中配置如下行,可让守护进程inetd启动pserver:
cvspserver stream tcp nowait cvs /usr/bin/cvs cvs –allow-root=/usr/local/cvs pserver
这是个用来阻断从internet访问cvs端口的好方法,可使用ssh隧道来远程的访问repository.

单独认证
CVS用户可能不是操作系统的一部分(即不是本地用户).这其实可从安全的角度去看.简单的添加一个叫passwd(in the CVSROOT directory)的文件,其包含crypt格式的用户登录名和密码.这也可以使用apache的htpasswd工具来完成.
注意:这个passwd文件仅仅是文件,可以在CVSROOT中直接编辑.它不能被签出.更多信息请用htpasswd –help


$ htpasswd -cb passwd user1 password1	//-c创建文件
$ htpasswd -b passwd user2 password2

现在添加:cvs到每行的结尾处,用来告诉cvs服务器更改用户到cvs(或任何你正在运行的 cvs 服务器下).它看起来像这样:


$ cat passwd
user1:xsFjhU22u8Fuo:cvs
user2:vnefJOsnnvToM:cvs

12.2 测试它

测试作为一般用户登录(比如我)


$ cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs login
Logging in to :pserver:colin@192.168.50.254:2401/usr/local/cvs
CVS password:

CVSROOT变量
这是个环境变量用来指定repository的位置.对于本地使用,该变量只需设置成repository的目录.对于通过网络使用,传输协议必须指定.使用setenv CVSROOT string (csh, tcsh shell)或者exportCVSROOT=string(sh,bash shell)设置CVSROOT环境变量.


$ setenv CVSROOT :pserver:@:/cvsdirectory

For example:


$ setenv CVSROOT /usr/local/cvs	//仅限本的使用
$ setenv CVSROOT :local:/usr/local/cvs	//同上
$ setenv CVSROOT :ext:user@cvsserver:/usr/local/cvs	//通过SSH直接访问
$ setenv CVS_RSH ssh	//ext协议访问
$ setenv CVSROOT :pserver:user@cvsserver.254:/usr/local/cvs	//通过pserver网络访问

一旦登录成功就可导入一个新项目进repository:cd进入你的项目根目录


cvs import   
cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs import MyProject MyCompany START

在repository中有个名叫MyProject新项目(之后用来签出).CVS会导入当前目录的内容进新项目.
签出:


$ cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs checkout MyProject

或者


$ setenv CVSROOT :pserver:colin@192.168.50.254:/usr/local/cvs
$ cvs checkout MyProject

12.3 通过SSH隧道访问CVS

我们需要两个shell来做这个.在第一个shell中,我们连接到cvs服务器并对cvs连接进行端口转发(port-forward).在第二个shell中,我们就像在本地一样使用cvs.
在shell 1:


$ ssh -L2401:localhost:2401 colin@cvs_server	//直接连接到cvs服务器.或:
$ ssh -L2401:cvs_server:2401 colin@gateway	//使用一个网关间接连接到cvs服务器

在shell 2:


$ setenv CVSROOT :pserver:colin@localhost:/usr/local/cvs
$ cvs login
Logging in to :pserver:colin@localhost:2401/usr/local/cvs
CVS password:
$ cvs checkout MyProject/src

12.4 CVS命令及其使用

导入
该import命令用来添加整个目录,它必须运行于要导入的目录中.比如,目录/devel/包含的所有文件和子目录要导入.该目录名在CVS中(模块)将会称为”myapp”.


$ cvs import [options] directory-name vendor-tag release-tag
$ cd /devel	//必须在该目录中来导入
$ cvs import myapp Company R1_0	//修订(release)标签可以为任何单个单词

在添加了一个新目录”/devel/tools/”后,也可这么导入.


$ cd /devel/tools
$ cvs import myapp/tools Company R1_0

签出、更新和提交


$ cvs co myapp/tools	//仅会签出tools目录
$ cvs co -r R1_1 myapp	//签出修订版本为R1_1的myapp(sticky)
$ cvs -q -d update -P	//典型的CVS更新
$ cvs update -A	//重置所有sticky标签(或日期、选项)
$ cvs add newfile	//添加一个新文件
$ cvs add -kb newfile	//添加一个二进制文件
$ cvs commit file1 file2	//仅提交这两个文件
$ cvs commit -m "message"	//提交所有更改并为这个更改添加日志消息

创建一个patch


$ cd /devel/project
$ diff -Naur olddir newdir > patchfile
$ diff -Naur oldfile newfile > patchfile

应用一个patch


$ cd /devel/project
$ patch --dry-run -p0 < patchfile
$ patch -p0 < patchfile
$ patch -p1 < patchfile
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论