版本控制CVS

概念:
  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

你可能感兴趣的:(职场,cvs,版本控制,休闲)