cvs命令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

cvs命令
1.安装
1.1 建立及初始化CVS工作目录
#mkdir /src
#msdir /src/cvslib
#cvs -d /src/cvslib init //初始化cvs工作目录,可以看到出现CVSROOT目录,表示初始化成功。

1.2 建立系统用户,包括管理员组和普通用户组两种权限。

#groupadd (CVSAdmin) //建立管理员组
#groupadd (CVSUser) //建立普通用户组
#useradd -g (CVSUser) -M (CVSUser_Sys1)
//不用添加Home目录(-M)而直接添加拥有访问CVS权力的系统用户CVSUser_Sys1,属于CVSUser组
#passwd CVSUser1
//设定CVSUser_Sys1的系统登陆密码(应该可以对真正的CVS用户透明)
1.3 设定各组系统用户权限,作为CVS不同类型用户的代表
#chgrp -R (CVSUser) /src/cvslib //?添加新的工程是否直接在此处修改权限?
#chmod -R u=rx,g=rx /src/cvslib //设定组用户权限
此外:
<1>CVS用户(组)必须对/src/cvslib目录有执行权(列表权)和写权利,可以没有读权利;
#chmod u=wx,g=wx /src/cvslib (o-other不改变)
<2>CVS用户(组)必须拥有对/src/cvslib/CVSROOT目录及其中所有文件的读权限(r)和列表权限(x);#chmod
g=rx /src/cvslib/CVSROOT (o-other不改变)
<3>CVS用户(组)必须拥有对/src/cvslib/CVSROOT目录下history文件的写权限;
#chmod u+w,g+w /src/cvslib/CVSROOT/history (o-other不改变)
<4>CVS用户(组)如果希望拥有操作(checkout等)某个项目(CVS 中称为模块)代码等资料的权利,必须拥有对该目录及其子目录的rwx 权限。

否则在操作时,一旦遇到没有该用户权限的文件或目录,则操作中断。

#chmod -R u+rwx,g+rwx (/project)
1.4 配置CVS口令服务器
<1>在CVS服务器的/etc/services文件中添加新服务端口:(目前的Linux都已经预先设定好) cvspserver 2401/tcp
<2>在/etc/xinetd.conf/目录中添加一个新文件,名称随意,内容为: service cvspserver
{
flags = REUSE
socket_type = stream
wait = no user = root //?如何设置多个用户?//必须为root 么?(必须为root,不能用其它用户名)
server = /usr/bin/cvs //cvs的安装目录
server_args = -f --allow-root=/src/cvs pserver //cvs文件的保存目录,且--allow-root中间的横线不能分开
disable = no
log_on_failure += USERID
}
如果用的是 inetd 的系统,在 /etc/inetd.conf 里加入:
cvsserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/home/cvsroot pserver
<3>改变CVSROOT目录下的config文件访问属性,使其可被用户修改。

去掉/src/cvslib/CVSROOT/config中的#SystemAuth = no注释符号#,使其有效,必须在passwd中存在用户名称和密码的才可以登陆,而不用系统为该用户提供的密码校验。

即虽然用户名和系统的一样,但是登陆的密码是用htpasswd时定义的密码。

<4>重新起动CVS口令服务器
#/etc/rc.d/init.d/xinetd restart
<5>检查CVSServer服务是否已经启动
#netstat -l |grep cvspserver
应该有如下结果:
tcp 0 0 *:cvsps
erver *:* LISTEN
1.5 创建用于外部访问CVS服务器的用户利用Linux的加密命令对CVS外部访问用户的密码进行加密
<1> 创建/src/cvslib/CVSROOT/passwd (注意必须名字为passwd,不能用其它文件名称) //用于保存用户名、加密后的密码及该用户具有那个系统用户的权限的文件
<2> #htpasswd -c /src/cvslib/CVSROOT/(passwd) (CVSUser_connect1)
//输入密码后,passwd格式为[用户名:加密后的密码明文] [cvstest:vORwxVRU8zDvw]
//需要修改为[用户名:加密后的密码明文:系统用户]的格式[cvstest:vORwxVRU8zDvw:CVSUser_Sys1]
//这样就建立了外部访问用户
2.登陆cvs:
cvs -d :pserver:xuquanxing@ip:/home/cvsroot login
Note:pserver是访问方式,如果服务器设置的是口令认证,则是 pserver。

username是 CVS服务器的用户名,可以根据你的设置修改; the_server_name是CVS服务器的名称或者IP地址; /home/cvsroot是你的CVS服务器的CVSROOT目录,根据你的CVS 服务器设置做修改或者询问管理员.
这时候cvs会问你口令,请把你在CVS服务器上的口令敲进去:Passwd:xxxxxxxx
3.提交项目--import
cvs import [-options] repository vendortag releasetag... Note: 该命令将当前目录下的所有文件(包括子目录)导入源代码储存库。

repository :项目名称,在CVS服务器上会创建以这个名字命名的仓库。

vendortag : 项目分支的总标记。

(不常用) releasetag :标识文件的输入层次的标记。

(一般用start) 使用import提交项目的时候,CVS会要求对项目进行说明。

在默认状态下,CVS会弹出文本编辑器。

用户也可以用-m “log_message”来输入
说明信息。

例如 $cvs import -m "upload the first time as new module" judecvs v_0_0_1 start
提示:import 一般在第一次导入module时使用。

后期修改文件后可直接使用commit命令提交修改的文件。

4.从CVS导出项目--checkout
cvs checkout [options] modules... 此命令将源代码储存库中已有的项目导出到当前目录。

modules :项目名称例如,从仓库中检索出judecvs项目的源文件. $cvs checkout judecvs
5.CVS 主要命令---update 更新当前工作目录中的文件
cvs update [-options] [files...] 此命令比较指定CVS源码库中的文件和当前目录下的文件,如果CVS源码库中有更高版本的源文件,则更新当前目录下的文件。

此命令只有在
checkout命令使用过后才能使用。

在执行update命令时,CVS 并不是简单的将新版本覆盖当前文件,而是试图将新版本所做的修改添加到当前文件中去。

如果发生冲突,CVS会
以字符串“<<<<<<”和“>>>>>>”来表示冲突发生。

这时候你可以修改文件,重新提交。

提示:如果你已经做过一次checkout 了,那么不需要重新checkout,只需要进入cvstest项目的目录,更新一把就行了
:例如: $cd judecvs $cvs update
6.CVS 主要命令---status 如果你不想直接更新,只是想看看有没有更新的东西,那么:
$cvs status 会给每个文件有一份状态报告,类似这样:========================================= ========= File: client.c Status: Up-to-date Working revision:
1.1.1.1 'Some Date' Repository revision: 1.2 /home2/cvsroot/judecvs/client.c,v
这里最重要的就是Status 栏,这里总共可能有四种状态:Up-to-date:表明你要到的文件是最新的. Locally Modified:表明你曾经修改过该文件,但还没有提交,你的版本比仓库里的新.Needing Patch:表明有人已经修改过该文件并且已经提交了!你的版本比仓库里的旧. Needs Merge:表明你曾经修改国该文件,但是别人也修改了这个文件,而且还提交给仓库了!
7.CVS 主要命令---commit 保存修改到CVS中
cvs commit [-lnR] [-m 'log_message' | -f file] [-r revision] [files...] 此命令将当前目录下的源代码与CVS中最新版本比较,并进行更新。

[-m ‘log_message‘ ] :输入修改说明。

[-r revision] :指定版本。

[files...] :指定修改文件。

$cvs commit -m "add XXX function" client.c
系统会提示CVS: ---------------------------------------------------------------------- CVS: Enter Log. Lines beginning with `CVS:' are removed automatically CVS: CVS: Committing in . CVS: CVS: Modified Files: CVS: client.c CVS: ----------------------------------------------------------------------
退出后,系统询问是否continue,输入c,则完成checkin Log message unchanged or not specified a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs Action: (continue) c Checking in client.c;
/home2/cvsroot/judecvs/client.c,v <-- client.c new revision: 1.2; previous revision: 1.1 done
如果CVS上文件已经有其他人更新,也就是我当前工作的不是最新版本,系统提示commit失败,这时候需要先update,然后把整合文件再 commit. cvs server: Up-to-date check failed for `client.c' cvs [server aborted]: correct above errors first! cvs commit: saving log message in /tmp/cvsCEjA9N
提示:修改文件之前先update或者先查看文件状态,确认当前工作版本是最新版本。

8.添加文件到项目中---add
cvs add [-k kflag] [-m 'message'] files... 此命令并不真正添加文件,只是将文件注册到项目中,要真正添加文件,还要使用commit 命令。

例如: $cvs add -m "test add" testadd.c
提示: cvs server: scheduling file `testadd.c' for addition on branch `v_0_0_2' cvs server: use 'cvs commit' to add this file permanently
$cvs commit
同commit过程一样,CVS将testadd.c添加到项目中
9.CVS 主要命令---remove 从项目中删除文件
cvs remove [-k kflag] [-m 'message'] files... 和add命令一样,此命令并不真正删除文件,只是将文件从项目中取
消,要真正删除文件,还要使用commit命令。

e.g. $rm testadd.c $cvs rm testadd.c 系统提示cvs server: scheduling `testadd.c' for removal cvs server: use 'cvs commit' to remove this file permanently
$cvs commit testadd.c
此时,CVS才将testadd.c从项目的最新版本中删除,但是如果它有以前的版本,以前版本依然存在。

cvs update的信息报告 "cvs update" 后在信息框里会列出你的操作,你的文件update的情况,这里是CVS使用的所有其它单字符信息性消息的列表: U [path] 在本地机更新get到了服务器上最新的或者最新版本的文件。

P [path] 像“U”一样,只是在update时你的网络带宽少的情况下CVS服务器所出现的提示。

M [path] 这意味着您已经修改过该文件了;而且,有可能资源库中新的更改已成功地合并到该文件。

C [path] 错误警报,"C" 字符表明该文件存在冲突,需要在使用 "commit" 提交前解决这冲突。

A [path] 该文件是计划要添加的,即添加了但尚未提交,这时你还使用update命令,CVS就会有这个提示,当你 "commit" 时,它被正式添加
到服务器库中,问题解决。

R [path] 象 "A" 一样,"R" 让您知道该文件计划要删除的,即删除了但尚未提交,这时你还使用update命令, CVS就会有这个提示,当你 "
commit" 后,该文件就会从服务器库中删除,问题解决。

常用的cvs命令
. 导入一个源代码库:
源代码库在目录/home/weiqiong/project,其下有文件test.c和test.h
shell>cd /home/weiqiong/project
shell>cvs import -m "test project" test(需要导入的项目名) weiqiong(开发商信息) start(版本信息)
2. 获得第一份工作copy
shell>cd /home/weiqiong
shell>cvs checkout test
则目录/home/weiqiong/test中就会有test.c和test.h两个文件
3. 检查工作拷贝(-Q为去除无关的提示文字)
shell>cvs -Q update(将cvs上的更新下载到本地)
shell>cvs -Q diff -c(比较cvs上和本地的代码的不同)
如果希望查看某一特定文件的变化,在最后加上文件名
4. 浏览记录信息
shell>cvs log test.c
5. 查看两个版本的不同之处:
shell>cvs diff -c -r 1.3 -r 1.4 test.c
6. 恢复旧版本:如果当前最新版本为1.4,而你想将其恢复到1.3版本,重新建立一个新版本1.5
shell>cvs -Q update -p -r 1.3 hello.c > hello.c
(如果没有-p,表示检验出1.3版本,但是会sticky;加上-p,将1.3版本打到标准输出中,且没有sticky,此处覆盖hello.c文件)
shell>cvs update hello.c
(可选,但是一般ci之前都要update一次)
shell>cvs ci -m "reverted to 1.3 code" hello.c
或者
shell>cvs update -j 1.4 -j 1.3 hello.c
(将1.4->1.3的差异,应用到当前版本上)
shell>cvs update hello.c
(可选,但是一般ci之前都要update一次)
shell>cvs ci -m "reverted to 1.3 code" hello.c
如果是目录
在你
需要恢复的目录下
cvs tag TAG_R1_0_0_2
cvs update -j TAG_R1_0_0_2 -j TAG_R1_0_0_1
cvs update
cvs ci -m "restore to R1_0_0_1"
或者
在你需要恢复的目录的上一级目录中
cvs export -d project_name.old -r TAG_R1_0_0_1
project_name
cp -rf project_name.old/* project_name/
rm -rf project_name.old
cvs update
cvs ci -m "restore to R1_0_0_1"
请注意,内容是恢复到了TAG_R1_0_0_1,但是版本一直在增加。

7. 增加文件
vi newfile
cvs add newfile(若为二进制文件则用cvs add -kb readme.doc)cvs ci -m "add newfile" newfile
8. 删除文件
rm newfile.c
cvs remove newfile.c
cvs ci -m "removed newfile.c" newfile.c
9. 增加目录
mkdir newdir
cvs add newdir
10. 要增加带有多级目录和文件的子目录,方法是导入一个目录
比如原项目叫abc,在abc目录下想增加一个带有多级目录和文件的目录jni,
cd jni
cvs import -m "new dir jni" abc/jni weiqiongimport R1_0_0_0 然后,客户端(自己和其他人的客户端)需要
cvs update -d 获取最新的目录更新
11. 删除目录
先删除目录下的所有文件,然后
cvs update -P 从工作copy中删除空目录,但是源代码库依然保留着空目录
如果需要更新工作copy的目录与源代码库完全一致(主要是包括空目录),需要
cvs update -d
如果不需要恢复,应该
到服务器上rm -rf删除该目录
在客户端,rm -rf删除该目录,然后在该目录的同级CVS目录下,修改Entries文件,删除带有该目录名的一行
12. 导出不带CVS目录的源文件,export只能针对一个TAG或者日期导出,空目录不会被导出:
cvs export -r release1 project_name
cvs export -D 20021023 project_name
cvs export -D now project_name
cvs export和cvs co module的区别在于export不生成CVS目录,也不导出空目录,用于作发布
13. 确认版本里程碑
cvs tag release_1_0
14. 开始一个新的里程碑,标记所有文件开始进入2.x的开发
cvs commit -m "make all release 2.0" -r 2.0
cvs up -A
15. 版本分支的建立
在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,
则从先前标记的里程碑:release_1_0导出一个分支release_1_0patch
cvs rtag -b -r release_1_0 release_1_0patch projname
一些人先在另外一个目录下导出release_1_0patch这个分支:解决1.0中的紧急问题,
cvs checkout -r release_1_0patch
而其他人员仍旧在项目的主干分支2.x上开发
在release_1_0patch上修正错误后,标记一个1.0的错误修正版本号
cvs tag release_1_0patch_1
如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0patch_1
中的修改到当前代码中:
cvs update -j release_1_0patch_1
(将release_1_0patch->update -j release_1_0patch_1的改变,merge到当前的版本中)
16.修改某个版本注释:
每次只确认一个文件到CVS库里是一个很
好的习惯,但难免有时候忘了指定文件名,
把多个文件以同样注释commit到CVS库里了,以下命令可以允许你修改某个文件某个版本的注释:
cvs admin -m 1.3:"write some comments here" file_name
修改从1.2->1.3checkin时的注释
17.在注释中可以加入以下宏,cvs会自动将其替换为相应的项
$Id$ $Header$ $Author$ $Date$ $Revision$ $Log$ $Source $ $Name$
18.查看当前各文件的状态,包括文件的当前编辑版本号,源代码库版本号,文件的状态
cvs status filename
19.粘着选项
cvs update -D "1999-04-09"
删除粘着,回到当前最新版本
cvs update -A
CVS是一种广泛应用的、开源的、透明于网络的版本控制系统。

用户使用CVS时,首先要架设一台CVS服务器,在CVS服务器上导入项目实例、设置CVS项目访问控制等。

而客户则通过客户端来访问CVS服务器,客户可以取得项目最新代码副本,提交自己修改的代码等,而客户可以从Internet、LAN甚至本机来访问CVS服务器。

下面,我就带领大家在Linux环境下架设一台CVS服务器,希望能够对想要学习CVS服务器架设的朋友带来一些帮助。

1、下载源码
通过搜索引擎找到CVS的源代码包,也可以从CVS的官方网站/doc/ad7485613.html,上寻找,由于CVS历史上也出现过一些安全漏洞,所以建议要定期去其官方网站上看看有没有最新版本推出。

2、编译安装
[root@terry src]# tar -xjpvf CVS-1.12.5.tar.bz2
[root@terry src]# cd CVS-1.12.5
[root@terry CVS-1.12.5]# 。

/configure --prefix=/usr/local/terry_yu/CVS
--disable-server-flow-control
[******************.5]# make
[******************.5]# make install
以上指令将CVS安装到/usr/local/terry_yu/CVS这个目录上。

注:除了使用源码包进行安装之外,还可以使用RPM包来安装。

3、设置启动CVS服务
在Linux上CVS服务可以通过inetd、xinetd或tcpwrapper等来启动,其中inetd由于安全理由在许多场合已经被xinetd所取代了,这里我们使用xinetd来启动CVS服务。

在/etc/xinetd.d目录下为CVS服务创建一个配置文件,比如:/etc/xinetd.d/CVSpserver,编辑/etc/xinetd.d/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
}
注:
1)pserver表示是口令认证的访问方式,这是最常用的方式,其他还有gserver,kserver,ext,如果想要更高的安全性可以使用ssh 来加密口令和数据流,不过这里为了用户使用的方便,仍然选的是pserver。

2)--allow-root是指定Repository的目录,可以建立多个Repository
然后重新启动xinetd:
[root@terry bin]# /etc/rc.d/init.d/xinetd restart
Stopping xinetd:[ OK ]
Startin
g xinetd:[ OK ]
重新启动xinetd服务后,CVS服务也开始工作了。

4、在CVS服务器端建立Repository
首先要创建一个名为CVS的组和一个名为CVSroot的用户,以后要访问CVS服务的用户加入CVS这个组:
[root@terry root]# groupadd CVS
[root@terry root]# useradd -g CVS -s /sbin/nologin CVSroot
[root@terry root]# chown -R CVSroot /home/CVSroot
接下来进行初始化:
[root@terry root]# CVS -d /home/CVSroot init
这样在/home/CVSroot目录中就产生了CVSROOT目录,其中存放了一些配置文件,如config等,然后设置权限:
[root@terry root]# chown -R CVSroot.CVS /home/CVSroot
[root@terry root]# chmod -R ug+rwx /home/CVSroot
[root@terry root]# chmod 644 /home/CVSroot/CVSROOT/config
为了CVS系统的安全,我们要修改/home/CVSroot/CVSROOT/config文件,将“#SystemAuth =no”前面的注释号#去掉,即改为“SystemAuth =no”,然后给开发者们逐一建立账号,新建的不要分配用户目录,因为它将作为一个虚拟用户帐号来使用,具体命令如:
[root@terry root]# useradd -g CVS -M bogus
[root@terry root]# passwd bogus
上面的命令就创建了一个并没有Home目录的用户bogus,接着将系统的shadow文件复制到CVSROOT,并重命名为passwd:
[root@terry root]# cp /etc/shadow /home/CVSroot/CVSROOT/passwd
[root@terry root]# chmod 0644 /home/CVSroot/CVSROOT/passwd
然后修改passwd文件,将除bogus之外的所有行删除,然后去掉每行第二个冒号以后的所有内容,并添上字符串CVSroot,改为如下格式:
bogus:ND5$J8N9BW5DKV.nPdxfdsh:CVSroot
然后,删除掉刚刚在系统中添加的那个用户bogus:
[root@terry root]# userdel -f bogus
好了,到这里,CVS服务器端就已经安装设置好了,这样你的CVS用户就只能用passwd中规定的用户来登陆你的CVS服务器了,要注意的是:本文介绍的添加用户的方法适用于小数量的用户,如果是有大规模的开发人员,推荐采用连接LDAP或者数据库来进行用户的认证服务。

1. 安装 cvs
$ sudo apt-get install cvs
2. 安装 cvsd
$ sudo apt-get install cvsd
cvsd安装以后, 会提示设置“repository” 的位置location, type in "/cvsroot".
“RootJail” is setted in “/etc/cvsd/cvsd.conf”, the default value is /var/lib/cvsd.
This means, your repository location could be just “/cvsroot”
3. 创建 /myrepos。

$ cd /var/lib/cvsd
$ sudo mkdir cvsroot
4. 初始化 /cvsroot
$ sudo cvs -d /var/lib/cvsd/cvsroot init
5. 设置cvsd用户鉴定(user authentication)
normal it’s system level, and the cvs users should be configured independently.
$ sudo vi /var/lib/cvsd/cvsroot/CVSROOT/config
添加下面行:
SystemAuth=no
PamAuth=no
LockDir=/tmp/cvsroot
Look out! “/tmp/cvsroot” 和RootJail的位置是相关的.
6. 创建 LockDir
$ s
udo mkdir /var/lib/cvsd/tmp/cvsroot
7. 创建 users
$ sudo cvsd-passwd /var/lib/cvsd/cvsroot cvs-user
8. 编辑 cvsd configuration
$ sudo vi /etc/cvsd/cvsd.conf
The default one should be:
RootJail /var/lib/cvsd
Repos /cvsroot
NOTICE! Repos路径也是和RootJail相关的.
9. Set directory’s popedom
$ sudo chown cvsd:cvsd /var/lib/cvsd -R
10. Restart cvsd
$ sudo /etc/init.d/cvsd restart
test cvs
cvs -d :pserver:mcl@localhost:/cvsroot login
cvs -d :pserver:mcl@localhost:/cvsroot checkoutpserver认证方式使用缺省端口,不使用代理.
若使用ssh认证方式,需要进行如下设置:
配置.ssh/config 和 .bashrc文件
$ cd ~
$ vi .ssh/config
添加内容为:
Host localhost
HostKeyAlias cvsserver
Hostname 192.168.11.134
Port=22
$chmod 600 .ssh/config
$ vi .bashrc
添加内容:
CVS_RSH=ssh
CVSROOT=:ext:mcl@localhost:/cvs
export CVSROOT
export CVS_RSH
有可能还需要进行PATH设置,然后export PATH
$source .bashrc
然后就可以使用了
cvs co 目录文件名
cvs update 目录文件名
关于本地CVS sever的相关测试还没试,这个需要进一步学习cvs 的命令,进行相应部署,之后再研究下,:)
参考:/doc/ad7485613.html,/archives/date/2007/03/ page/2/中
Ubuntu cvs installation and configuration。

相关文档
最新文档