免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1237 | 回复: 0

cvs 学习 [复制链接]

论坛徽章:
0
发表于 2007-12-25 20:58 |显示全部楼层

cvs
索引:

  • 权限设定


  • 配置cvs口令服务器


  • 初始化服务器


  • 使用基础


  • 常用命令缩写


  • 标签的管理


  • 版本分支


  • cvs输出export


  • 清除工作拷贝


  • 日志管理


  • 关键字扩展


  • 模块配置


  • 二进制文件配置


  • 触发器文件


  • 其他配置文件

    1.权限设定
    (1).设定规则
    cvs用户必须拥有对$CVSROOT/CVSROOT目录及其中所有文件的读权限。
    cvs用户必须拥有对$CVSROOT/CVSROOT目录下history文件的写权限。
    cvs用户如果希望拥有修改某个项目(模板)代码等资料的权利,必须拥有对该目录的写权限。
    cvs系统的权限控制依赖于操作系统,可利用操作系统本身的权限设置来控制cvs的权限。
    (2).口令文件
    pserver认证方式以明文在网络上传输cvs密码。使用口令文件允许cvs用户使用与系统帐号密码不同的密码。
    口令文件在服务器的$CVSROOT/CVSROOT/passwd文件。格式为:
    cvsuser:[passwd][:sysuser]
    口令passwd从/etc/passwd或/etc/shadow获得。
    口令文件的安全性很重要,应该将该文件的读写权限仅限于root。
    如:
    anonymous:
    ken:aWTrltv4Ae:pubcvs
    (3).设定只读用户
    在$CVSROOT/CVSROOT/readers文件里,每行记录一个cvs用户名。
    (4).设定具有写权限的用户
    在$CVSROOT/CVSROOT/writers文件里,每行记录一个cvs用户名。
    同时在readers和writers里的用户只拥有读权限。

    2.配置cvs口令服务器
    (1).inet服务器
    文件/etc/services:
    cvspserver 2401/tcp
    文件/etc/inet.conf:
    cvspserver stream tcp nowait root /usr/local/bin/cvs cvs –f \
            --allow-root=$CVSROOT pserver
    (2).xinet服务器
    编辑cvspserver文件:
    service cvspserver
    {
      port = 2401
      socket_type = stream
      wait = no
      user = root
      server = /usr/bin/cvs
      server_args = -f --allow-root=$CVSROOT pserver
    }
    (3).客户端配置
    设置环境变量CVSROOT:
    CVSROOT=:pserver:username@hostname(ip):[port]path
    如:
    :pserver:cvsadm@10.10.16.177:2402/home/cvsroot
    :pserver:cvsadm@10.10.16.177:/home/cvsroot
    (4).客户登录/注销cvs login
    cvs logout

    3.初始化服务器
    如果设置了环境变量CVSROOT,则执行:
    cvs init
    否则,执行:
    cvs –d path init
    其中path等于$CVSROOT。

    4.使用基础
    (1).创建新项目(模板)
    进入项目所在目录:
    cvs [ -d $CVSROOT] import [-m log] name VENDOR START
    VENDOR表示开发者的标识,START表示起始版本标签。
    如:
    cd eSWITCH
    cvs import eSWITCH v s
    (2).捡出工作拷贝cvs checkout [ -d dir ] module
    局部选项-d表示将拷贝放到目录dir下,而不是在一个与module名一样的目录下。
    cvs使用文件的时间戳,所以保持服务器和客户端的时钟同步是很重要的。
    (3).比较仓库和拷贝的区别cvs diff filename
    cvs diff -c filename(使用对照方式)
    (4).提交工作拷贝cvs commit [-m log] [filename]
    当一次提交多个文件时,这些文件共享同一个日志信息。
    (5).更新工作拷贝cvs update [ filename ]
    (6).查看日志信息cvs log filename
    (7).版本回退
    方法一:取出旧版本,重新提交。如:
    cvs update
    cvs up –p –r1.2 test.c >test.c
    cvs ci test.c
    方法二:使用join(合并)选项。如:
    cvs up –j 1.3 –j 1.2 test.c
    cvs ci test.c
    把1.3版本与1.2b版本之间的差异补到当前1.3版本上,相当于从1.3版本上将1.2到1.3之间的变化又减去了。
    (8).添加目录或文件
    创建一个目录或文件后,执行:
    cvs add newfile
    对于文件,还要做提交:
    cvs ci newfile
    (9).删除文件rm newfile
    cvs remove newfile
    或:
    cvs remove –f newfile
    最后,进行提交:
    cvs ci newfile
    (10).删除目录
    首先删除该目录下所有文件,然后使用update的-P选项删除目录:
    cd newdir
    cvs remove –f new.c
    cd ...
    cvs update –P
    执行cvs update时,cvs并不会自动取出在工作拷贝创建之后新添加到仓库的目录。解决方法是使用update的-d选项:
    cvs update –d
    (11).重命名文件
    方法一,先从cvs中删除旧文件,再添加新文件:
    mv old new
    cvs remove –f old
    cvs ci old
    cvs add new
    cvs ci new
    方法二,直接修改服务器上的文件,要确保没有人访问这个文件,否则将引起不可预知的后果:
    cd $CVSROOT/module
    mv old,v new,v
    (12).重命名目录
    方法一,创建新目录,将旧目录下的文件移到新目录下,删除旧文件,添加新目录,添加新文件:
    mkdir newdir
    mv olddir/* newdir
    cvs remove olddir/*
    cvs ci
    cvs add newdir
    cvs ci newdir
    方法二,直接再cvs服务器仓库中移动目录:
    cd $CVSROOT/module
    mv olddir newdir

    5.常用命令缩写
    cvs checkout:cvs co;
    cvs commit:cvs ci;
    cvs update:cvs up;
    cvs status:cvs st;

    6.标签的管理
    (1).创建标签cvs tag tagname
    (2).标签命名
    以字母开头,中间可以含字母、数字、下划线、连字符。
    (3).删除标签cvs tag -d tagname
    (4).重命名标签
    先贴上新标签,再删除旧标签:
    cvs tag –r tag1 tag2
    cvs tag –d tag1
    (5).修改某个文件的标签指到别的版本cvs tag –r new-version –F tag1 filename
    如:
    cvs tag –r 1.6 –F tag1 test.c
    (6).查看标签cvs status –v filename
    (7).特定约束标签
    按照日期贴标签:
    cvs rtag –D date tagname module
    按照已经版本/标签贴标签:
    cvs rtag –r revision/tag newtag module
    (8).获取某个特定版本cvs update –r revison/tag module
    cvs update –D date module
    (9).恢复到最新版本cvs update –A

    7.版本分支
    (1).分支版本号
    在x.y版本上的分支编号依次是x.y.2、x.y.4、x.y.6等等。
    (2).在工作拷贝中创建分支
    取出某一版本的代码:
    cvs checkout –r tag module
    创建:
    cvs tag –b branch-tag module
    (3).直接在仓库中创建分支cvs rtag –b –r tag branch-tag module
    (4).访问版本分支
    方法一、捡出:
    cvs checkout –r branch-tag module
    方法二、版本切换:
    cvs update –r branch-tag
    (5).将分支合并到主干
    在主干目录下,执行:
    cvs update –j branch-tag [ filename ]
    每次合并都会把从分支基部到分支最新版本之间的全部修改都合并到主干中。
    可以指定合并的版本范围。如:
    cvs up –j 1.1.1.1.6.1 –j rel-20021010-brach test.c
    把分支rel-20021010-brach从1.1.1.1.6.1到最新版本之间的修改合并到主干上。
    进行多次反复合并的一个技巧是在每次合并之后,将分支再贴上标签,这样,每次合并时的分支版本都有标签可以标识。
    (6).将主干合并到分支
    在分支目录下,执行:
    cvs update –j HEAD
    其中HEAD是关键字,表示主干代码树的头部,也就是全部最新的主干代码版本。

    8.cvs输出export
    取出一份没有cvs痕迹的源代码:
    cvs exprot –r tag [ -d dir ] module

    9.清除工作拷贝cvs release –d module

    10.日志管理
    (1).查看详细修改记录cvs annotate [ -r revision/tag | -D date ] [ filename ]
    (2).查看历史记录cvs history
    (3).修改日志信息cvs admin –m revsion: “messages” filename
    对于共享日志,需要对每个文件单独执行上述操作。

    11.关键字扩展
    cvs中的关键字用两个“$”符号,中间是一个rcs的特定关键字。常用列表如下:
    $Revision$
    自动扩展为版本号。
    $Log$
    累计日志信息。
    每次更新都进行累加,如果太长,可以手工删除旧的注释。
    $Author$
    扩展为提交版本的用户的用户名。
    $Date$
    上一次提交的日期、时间。
    $Id$
    扩展为文件名、版本号、日期、作者、状态,如果被锁定,还有锁定者的用户名。
    $Source$
    扩展为带有完整路径的源代码文件名。

    12.模块配置
    (1).定义模块步骤
    修改模块文件需要先checkout:
    cvs checkout CVSROOT/modules
    修改完毕提交:
    cvs ci CVSROOT/modules
    (2).语法module-name [ options ] dir [ files …]
    (3).使用举例
    由project/acctmgmt组成的模块:
    acctmgmt  project/acctmgmt
    有目录下的三个文件组成的模块:
    acctmgmt  prject/acctmgmt readme install license
    不包含指定目录下的子目录doc:
    acctmgmt  !project/acctmgmt/doc project/acctmgmt
    定义别名(有三个模块组成):
    acctmgmt –a init mm file
    引用:
    lk & linux_kernle
    (4).模块选项
    -d name:让工作拷贝的名字为参数值而不是模块名;
    -e prog:文件被输出(exprot)时执行的程序;
    -i prog:提交模块时执行的程序;
    -o prog:捡出模块时执行的程序;
    -s status:给模块定义一个状态;

    13.二进制文件配置
    在cvs中保存二进制文件,要使用“-kb”选项来禁止cvs对文件进行加工。该选项只需要在cvs add时使用。“-kb”是一个Sticky Option。
    (1).cvswrappers
    通过配置$CVSROOT/CVSROOT/cvswrappers文件,使cvs根据文件扩展名来区别二进制文件。
    (2).修改方法
    同modules的方式。
    (3).语法wildcard [ option val ] [ option val ] …
    (4).选项
    -m MERGE|COPY:更新方式,MERGE表示更新时进行版本间差异的合并,COPY表示直接拷贝,不进行合并处理。
    -k ‘b’|’o’|’kkv’:关键字扩展,’b’表示二进制;’o’表示“off”,不进行关键字扩展,但它仍进行不同平台之间的回车、换行转换;’kkv’表示扩展关键字的值。
    (5).使用举例*.gif –k ‘b’
    *.jpg –k ‘b’
    *.doc –k ‘b’
    *.bmp –k ‘b’
    *.mpp –k ‘b’
    *.xls –k ‘b’
    *.ppt –k ‘b’

    14.触发器文件
    (1).commitinfo
    定义每次提交发生时执行的程序。被提交的文件名作为程序的参数。
    (2).loginfo
    定义在提交操作完成之前被触发的程序,用户提交时写的日志信息传送到程序的标准输入。
    (3).verifymsg
    提交时,日志信息送到定义的程序的标准输入,程序返回0则进行提交,返回非0则提交被终止。
    (4).rcsinfo
    定义日志文件的模板文件。
    (5).taginfo
    定义贴标签时执行的操作,标签字符串、标签操作、仓库、文件版本作为参数传递给程序。

    15.其他配置文件
    (1).checkoutlist
    指定自定义的配置文件,使其置于cvs的版本管理之下。
    (2).cvsignore
    指定被cvs忽略的文件类别。
    缺省忽略的文件类型如下:
    RCS SCCS CVS CVS.adm
    RCSLOG cvslog.*
    Tags TAGS
    .make.state .nse_depinfo
    *~ #* .#* ,* _$* *.$
    *.old *.bak *.BAK *.orig *.rej *.del-*
    *.a *.olb *.o *.obj *.so *.exe
    *.Z *.elc *.ln
    core

    [/url]


    本文来自ChinaUnix博客,如果查看原文请点:[url]http://blog.chinaunix.net/u1/33950/showart_450064.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP