Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2887483
  • 博文数量: 674
  • 博客积分: 17881
  • 博客等级: 上将
  • 技术积分: 4849
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 10:15
文章分类

全部博文(674)

文章存档

2013年(34)

2012年(146)

2011年(197)

2010年(297)

分类: LINUX

2010-04-02 14:57:27

第一部分 基本工作流程
  1 登录
  2 得到一个工作副本
  3 修改
    3.1添加档案
    3.2删除档案
    3.3重命名档案 
    3.4添加二进制文件
  4 查询状态和解决分歧
  5 提交和清除副本
 第二部分 高级选项
 
  6.取出过去的档案
    6.1按时间取出
    6.2按标记取出
        6.2.1 标记
        6.2.2 按标记取出
  7.其它选项
    7.1 更新工作版本
    7.2 锁定与解锁文件
    7.3 监视文件
  8.分支
    8.1 创建分支
        8.1.1 基于当前工作副本创建分支
        8.1.2 基于旧版本创建分支
    8.2 访问分支
    8.3 合并分支
        8.3.1合并整个分支
        8.3.2一个分支多次合并
  9.发行软件
 
 第三部分 CVS Server架设及管理
  10.配置CVS Server
    10.1 CVS的基本配置
    10.2 权限设置
    10.3 管理文件概述
    10.4 外部脚本
  附录
  A 关键字列表
  1 登录
    加入环境变量:
    echo "export CVSROOT=:pserver:user@server:/path">>~/.bashrc
    . .bashrc
    注:pserver是服务器验证方式,也可以用别的方式验证,取决于服务器。
        user登录的用户名
        server服务器
        /path服务器仓库路径
    也可以不设置环境变量,在登录的时候用-d选项指定。
    登录:
    如果设置了环境变量,即可用以下方式登录: 
    cvs login
    若没有设置变量,则用以下方式登录:
    cvs -d ":pserver:user@server:/path" login   
    输入密码没出错便是登录成功,提示符什么都没有变。
   
    退出:
    cvs logout
  2 得到一个工作副本
    cvs checkout 档案名
  3 修改
  3.1添加档案
      3.1.1添加文件
        在工作副本中创建要添加的文件,然后使用
        cvs add filename
        命令告诉CVS你希望对该文件进行版本控制,最后使用
        cvs commit filename
        真正把该文件提交到仓库中。
        会*出一个文本文件让你写注释,若不想*出,在命令中加-m "comment"直接添加注释。
      3.1.2添加目录
        在副本中创建目录
        mkdir dir
        存入档案:
        cvs add dir
  3.2删除档案
      3.2.1删除文件
        rm filename
        cvs remove filename
        cvs commit filename
      3.2.2删除目录
        在CVS中删除目录就是删除该目录下的所有文件,CVS并不能直接删除目录本身,所以下一次checkout的时候仍会有该目录的存在,若不想该目录存在副本中,在checkout的时候加上-P选项,注意该选项会删除所有的空目录。
        进入该目录并删除目录下所有的文件
        cvs remove 刚刚删除的所有文件
        cvs commit
        cvs update -P
  3.3重命名档案
      3.3.1重命名文件
        mv old new
        cvs remove old
        cvs add new
        cvs commit old new
      3.3.2重命名目录
        mkdir new
        cvs add new
        mv old/* new/
        cd old &&  cvs remove 刚刚移走的所有文件
        cd new &&  cvs add    --------
        cd .. && cvs commit
        cvs update -P
        可以看出删除,移动,重命名的操作是麻烦的,所以在最初建立目录结构的时候一定要谨慎。
  3.4添加二进制文件 
        要注意的是提交二进制文件要加选项-kb
        cvs add -kb 文件名
        cvs commit 文件名
        如果未加-kb 选项,可以用cvs admin 命令来恢复:
        cvs admin -kb 文件名
        cvs update -A  文件名
        cvs commit 文件名
   
  4.查询状态和解决分歧
        在提交文件之前,最好查看一下文件的当前状态,以避免和他人发生冲突:
        cvs status -v 档案名
        常见状态:
        Up-to-date      :  最新版
        Locally Modified :  已修改,还未提交改变
        Needs Patch      :  需更新
        Needs Merge      :  另有人向仓库提交了新版本,而你也作了修改
        Needs Checkout  :  另有人向仓库提交了新版本。
      当发现工作副本和库存版本不一致时(若出现需更新和需合并的状况,则需要查看副本和服务器文件的差异
),可以用下面的命令查看差异之处:
        cvs diff
        cvs diff -c
      或库存版本和自己的修改有冲突,可以用查询记录的命令看看是和谁发生了冲突:
        cvs log
      找到和自己相冲突的人员协商解决。
  5.提交和清除副本
      5.1 提交修改
        在对文件作了一些修改之后,需要提交到服务器,用以下的命令可以完成提交:
        cvs commit 档案名
        写注释不是必须的,但多人开发的时候最好写上注释,而且要注意注释的质量,cvs commit会*出一个
        文件让你写注释,如果不想*出文件,可以加-m选项直接写上注释,如:
        cvs commit -m "comment" 档案名
      5.2 清除副本
          当你完成这个程序并要转到其它任务之前,你需要删除这个副本,这是一个好习惯,因为当你再要用这个程序的时候,你不是需要以前这个版本,而是要到服务器上去checkout新的版本。下面这个命令可以        帮你清楚副本:
        cvs release -d 档案名
      当然你也可以直接用rm命令删除副本,但推荐使用上面的命令,因为它可以帮你检查文件的变动。
  6 取出过去的档案
  6.1 按时间取出
      cvs -q update -D "2006-xx-xx xx:xx:xx GMT"
      注意:在按时间取档案的时候最好先用cvs log 档案名  查看要取什么时候的档案,因为在CVS内部使用的  是GMT时间,而计算机上多使用本地时间。两者相差很大。取出过去的档案并不能修改它,若要修改就必须开
  辟分支。
    恢复:
    cvs -q update -A
  6.2 按标记取出
    6.2.1 标记
      标记是当软件开发到一定阶段后人为的为它打上的标记,以作为将来维护的基点。加  标记的方法如下:
      cvs -q tag 标记名称
    6.2.2按标记取出:
      cvs checkout -r 标记名
      cvs -q update -r 标记名
      恢复方法同上。
 7.其它选项
    7.1 更新工作版本
      或许别人更改了一些程序,此时应更新一下自己的工作副本:
      cvs update
      cvs update -d
    7.2 锁定与解锁文件
      该选项是希望在自己修改文件的同时不让别人修改,用了此选项之后一定要记得在完成工作之后使用解
    锁命令,否则别人将不能修改此文件。
      cvs admin -l file
      cvs admin -u file
    7.3 监视文件
        由于锁定文件之后别人不能checkout,可能会降低工作效率,CVS的跟踪文件可以更好的完成锁定文件的功能,使用cvs watch on命令跟踪一个仓库或文件,那么这个里面的文件就checkout的时候就是只读状态,要编辑他就得先用cvs edit命令,这样别人就能用cvs watchers命令查看有多少人在修改这个文件。
 8.分支
      当软件正式发行后,你也继续在开发这个软件,准备过一段时间再推出新版本,但发行版本经过一段时
  间的使用发现了某些BUG,可当前的版本处于不稳定状态,不能基于最新的代码去修改发行版本的错误,这时
  就需要从发行版文件创建一个分支来修改这个错误,修改之后,可以选择将其合并到主干。
    8.1 创建分支
        8.1.1  基于当前工作副本创建分支:
              cvs tag -b tag_branch(分支版本号)
        8.1.2  基于旧版本创建分支
              cvs rtag -b -r tag_old tag_branch 档案名
              也可使用以下方法为旧版本创建分支:
              依标记取出过去的一个版本:
              cvs checkout -d dir  -r tag_old 档案名
              -d表示新建一个目录,取出的档案会放在这个目录中。
              进入这个目录 ,创建分支:
              cvs tag -b tag_branch
    8.2 访问分支           
        分支是在CVS仓库中创建的,创建分支不会自动把当前的副本切换到分支上,有两种方法访问分支:
          更新当前工作副本,使其成为分支:
        cvs -q update -r tag_branch
          重新按标记检出:
        cvs checkout -r tag_branch 档案名
        回到主干:
        cvs -q update -A
    8.3 合并分支
        8.3.1 合并整个分支
          进入主干目录:
          cvs -q update -j tag_branch
          cvs -q commit
        8.3.2 一个分支的多次合并
          假如有一个分支开发到1.2.2.2的时候你合并了一次,但你对分支又进行了开发,到1.2.2.4的时候又
          想进行一次合并,这时你按第一次合并可以会出现一些问题,你可以指定只合并从1.2.2.2到1.2.2.4
          的变化:
          cvs -q update -j 1.2.2.2 -j tag_branch
          合并的时候可以会发生冲突,你应该在提交新版本之前解决它。
 9. 取出档案,发行版本:
            由于在checkout的时候CVS会为每个目录加上一个CVS目录,但软件正式发行的时候是不需要这个目录
        的,可以用以下命令得到一份干净的软件发行版本:
        cvs -q export -r 标记名  -d dir 档案名称 
 
 10.配置CVS Server
    10.1 cvs的基本配置:
        检查/etc/services中有没有cvspserver:
        cat /etc/services |grep cvs
 
        在/etc/xinetd.d/下建立cvspserver文件,输入以下内容:
        service cvspserver
        {
          disable        =      no
              flags          =      REUSE
              socket_type    =      stream
              wait          =      no
          user          =      root
              protocol      =      tcp
              server        =      /usr/bin/cvs
          server_args    =      -f --allow-root=/cvspath(这里是CVS的仓库,任选) pserver
          }
       
          建立仓库目录:
          mkdir $cvspath
          chown -R user:user $cvspath
          不使用root用户做为cvs的默认用户。将仓库的权限交给user。
       
          重启xinetd:
          service xinetd restart
 
          在.bashrc中加入环境变量:
          export ":pserver:user@127.0.0.1/cvspath"
          运行:
          . .bashrc
          初始化:
          cvs init
          或许要先登录再初始化:
          cvs login
          cvs init
          使用cvs import命令将自己的档案导入CVS:
          进入源代码目录:
          cvs import -m "comment"  档案名 厂商或作者 版本号(可以随便选个,没什么影响)比如有个test项目:
          cd test
          cvs import -m "注释" test  user  v_0_0_1
    若要建立多仓库CVS,只需在server_args多加一个选项即可,例:
    server_args = -f --allow-root=/var/source --allow-root=/var/resource pserver
    由于xinetd有长度限制,可以使用如下方法:
    注释或删掉server_args行,将server行修改如下所示:
    server = /etc/cvs.run (文件位置任选)
    在所指定的目录下建立cvs.run文件,该文件要有执行权限:
    #!/bin/bash
    /usr/bin/cvs -f \
    --allow-root=/var/source1a \
    --allow-root=/var/source2  \
    .............
    chmod +x cvs.run
     
  10.2 权限设置:
    CVS自己的权限设置有限,只有三个基本文件:
    passwd
    writers
    readers
    passwd是为了建立CVS自己的用户认证系统。格式为:
    登录用户:加密的密码:系统中对应的用户
    writers中的用户可进行写操作。
    readers中的用户只可进行读操作。
    可以借助系统用户和操作系统自身的文件权限来限制用户的读写。还可以借助各种外部脚本来管理,这个后面再讲。
    10.3管理文件概述
      在$CVSROOT/CVSROOT目录下有许多文件 ,这里简单介绍一下:
        config  配置文件,可以配置系统认证方式以用lockdir等
        modules 模块文件
        commitinfo  在进行cvs commit的时候会检查这个文件,如果里面有什么脚本的话会先执行这里面的脚本,通过这个文件会实现的功能数不胜数,好好用了。相似的还有loginfo,taginfo
        passwd,writers,readers,前面说了。
    10.4外部脚本
        在CVS源码下有一个contrib目录,这个目录下面有很多脚本并有详细的说明。还有在主页上也有很多工具提供下载。
 
  A 关键字列表
        $Author$ 用户名
        $Data$ 登记时的时间
        $Header$ 标准的首部,包含RCS的完整路径名,日期,作者
        $Id$ 除RCS文件名不完整外与$Header$同.
        $Log$ 包含RCS的完整路径名,版本号,日期,作者和在提交时提供的日志信息.
        $RCSfile$ 包含RCS的文件名,不包括路径名
        $Revision$ 分配的版本号
        $Source$ RCS文件的完整名
        $State$ 分配的版本的状态,由 cvs admin -s 分配.
        $CVSHeader$
        $Name$
        $Locker$
        $Date$
        -ko:关闭关键字替换
 
阅读(1055) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~