概念:
1. CVS 是一种版本跟踪系统,它可以在软件开发过程中保持文件的各种记录以及取
出文件的任何已存储的版本。同时它也可以生成两个版本的差别文件。
2. CVS 可以让多名开发人员同时编译一个文件而不遗失任何数据。同时它将记录
谁在何事因何而改变了什么。通常情况下 CVS 可以自动解决冲突问题,但有时也需
要用户的干预。
3. CVS 可以按不同的用途应用在不同的环境之中,例如管理配置文件、邮件别名
(mailalias)、FAQ 文件、音乐作品、论文、书籍等等。甚至可以将整个/etc
目录放入其中,检测系统配置的更改
版本控制(version control)就是在项目中记录和读取变更的过程。版本控制系
统可以让你取回原有旧的版本也可以比较任意两个版本文件的差异。
***基 于 pserver 方式的 CVS 服务***
一/建立 cvs 用户组,便于管理 cvs 用户
#groupadd cvs
二/建立 cvs 组的 cvsroot 用户和所属的目录
#useradd g cvs G cvs d /home/cvsroot cvsroot
三/为 cvsroot 用户添加密码
#passwd cvsroot
四/改变/home/cvsroot 的目录属性
#chmod 775 /home/cvsroot
五/初始化 cvs 源代码库,此操作生成目录/home/cvsroot/CVSROOT,其下为一些初始化文件
#cvs -d /home/cvsroot init
#chown cvsroot.cvs /home/cvsroot/CVSROOT
六/建立用户
#htpasswd -c /home/cvsroot/CVSROOT/passwd qq
七/把刚建立的用户映射为系统用户
#vi /home/cvsroot/CVSROOT/passwd
qq:qqpasswd:cvsroot <#添加 :cvsroot >
八/默认允许系统用户登录 CVS, 关闭系统用户的登录
#vi /home/cvsroot/CVSROOT/config
将第二行的
#SystemAuth = no 去掉注释,即改为SystemAuth = no
九/使用 xinetd 监听 cvspserver 服务方式,在 xinetd.d 目录下添加需要启动的服务 cvspserver
#vi /etc/xinetd.d/cvspserver 添加如下:
service cvspserver
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
#log_on_suceess += HOST
#log_on_failure += HOST
}
十/重新启动 xinetd:
#service xinetd restart
十一/测试登录 cvspserver 服务器
#cvs -d :pserver:qq@$IP:/home/cvsroot login
---$ip 换为 cvspserver 服务器的真实 ip 地址,比如 127.0.0.1 或是192.168.0.x
十二/登录成功后导入首个项目,语法如下<现切换到项目源码的路径下>
#cvs -d :pserver:qq@$IP:/home/cvsroot import -m "随便写什么,说明一下" <项目名称> <开发商标记> <版本号>
如:#cvs -d :pserver:qq@$IP:/home/cvsroot import -m "new project" httpd qq http1
执行后:会将所有源文件及目录导入到/home/cvsroot/httpd 目录下
十三/这样每次执行cvs命令时都要指定“-d :pserver:qq@$IP:/home/cvsroot”,麻烦。可以这样:
#export CVSROOT=":pserver:qq@$IP:/home/cvsroot"
把这个添加进/root/.bashrc和/root/.bash_profile使重启生效
十四/现在建立一个工作目录/tmp/work
#mkdir /tmp/work
十五/再从刚建立在cvs中央库/home/cvsroot中把httpd检索下来
#cd /tmp/work
#cvs -d /home/cvsroot/ checkout httpd
十六/现在测试:
#cd /tmp/work 切换到工作目录
#touch file001 新建文件file001
#cvs add file001 cvs添加
#cvs commit file001 传达到cvs中央库 <需要切换到cvsroot普通用户,也可以补全命令#cvs -d :pserver:qq@$IP:/home/cvsroot>
现在在/home/cvsroot/httpd中应该多了一个file001,v
注意:
1.对于图片,Word 文档等非纯文本的项目,需要使用 cvs add -kb 选项按 2 进制文件方式导入(k 表示扩展选项,b 表示binary),否则有可能出现文件被破坏的情况
比如:
#cvs add -kb new_file.gif
#cvs add -kb readme.doc
2.很多 cvs 命令都有缩写形式:commit=>ci; update=>up; checkout=>co; remove=>rm;
3.即使工作目录删除了文件,中央库也不会
查看当前文件不同版本的区别
#cvs diff r1.3 r1.5 file_name
查看当前文件(可能已经修改了)和库中相应文件的区别
#cvs diff file_name
正确的通过 CVS 恢复旧版本的方法:
如果用
#cvs update r1.2 file.name
这个命令是给 file.name 加一个 STICK TAG: "1.2" ,虽然你的本意只是想将
它恢复到 1.2 版本
正确的恢复版本的方法是:
#cvs update -p r1.2 file_name >file_name
如果不小心已经加成 STICK TAG 的话:用如下方法解决
#cvs update A
移动文件/文件重命名
cvs 里没有 cvs move 或 cvs rename,因为这两个操作是可以由先
#cvs remove old_file_name
然后
#cvs add new_file_name
删除/移动目录
最方便的方法是让管理员直接移动,删除 CVSROOT 里相应目录(因为 CVS 一个项目
下的子目录都是独立的,移动到$CVSROOT 目录下都可以作为新的独立项目:好比一颗树,
其实砍下任意一枝都能独立存活),对目录进行了修改后,要求其开发人员重新导出项目。
#cvs checkout project_name
或者
#cvs update dP