Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7193048
  • 博文数量: 510
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6836
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(510)

文章存档

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: LINUX

2008-03-26 17:57:46

cvs用法总结(1)--cvs命令格式

读书笔记,中文名"版本控制之道-使用cvs",英文名"Pragmatic Version Control-Using CVS"。以下内容出自
英文版附录,中文内容来自中文实体书,使用范例是个人总结(总结出来,以后万一忘了可以查,呵呵)。

一. CVS Command Format/cvs命令格式
cvs command

Global Options / 全局选项
- H Displays usage information  for  command.显示命令用法
- Q Cause CVS to be really quiet.使得cvs不输出信息
- q Cause CVS to be somewhat quiet.使得cvs较少输出信息
- r Make checked - out les read - only.使得签出的文件只读
- w Make checked - out les read - write ( default ).使得签出的文件可读写(默认)
- l Turn history logging off.关闭历史纪录
- n Do not execute anything that will change the disk.不执行任何会修改磁盘文件的操作
- t Show trace of program execution,  try  with  - n.实现程序执行的轨迹(试着和 - n一起使用)
- v CVS version and copyright.cvs版本和版权说明
- b bindir Find RCS programs in bindir. 在 " bindir " 目录中找到rcs程序
- T tmpdir Use tmpdir  for  temporary les. 将 " temdir " 目录作为保存临时文件的目录
- e editor Use editor  for  editing log information.使用 " edit " 来编辑日志信息
- d CVSROOT Overrides CVSROOT environment variable as the root of the CVS tree. 取代CVSROOT环境变量作为cvs的根目录
- f Do not use the  / .cvsrc le. 不使用 / .cvstc文件
- z # Use compression level #  for  net trafc. 在网络通信中使用第 " # " 级压缩
- a Authenticate all net trafc.炎症所有网络通信
- s VAR = VAL Set CVS user variable.设置CVS用户变量



使用范例:
   1.察看cvs版权信息
       cvs -v
   2.察看cvs帮助
       cvs -H

二. Flag Characters/标记字符

 在更新操作期间,CVS将显示一列前面带有标志字符的文件名。下面列出了这些字符代表的意义:

A 文件  文件已经从本地添加到CVS,但是还没有存放到仓库中

C 文件  当试图更新文件时检测到了一个冲突(也就是说,在本地修改的代码和与在仓库中被修改的代码有冲突)。这个文件在本地的副本中包含冲突记号,而文件原来的版本存放在一个叫做.#文件.version的新文件中

M 文件  文件已经在工作区中被修改,需要存回到仓库以使仓库保持更新。

P 文件  作用和
" U " 相同, " P " 标志表示服务器使用了一个补丁文件将这个文件更新成最新的。

R 文件  文件已经从仓库的工作副本中移走(使用 cvs remove 命令)。当运行cvs commit命令后,这个文件在仓库中的版本才会被移走

U 文件  文件的本地副本已经按照仓库中的最新版本更新了。只有当文件在仓库中的版本比本地版本新以及有一个新文件在仓库中而没有在本地区时才会发生。

?  文件  文件只存在于工作区中但是仓库中没有这个文件的任何信息。可以使用cvs add 命令来添加这个文件,或者通过修改.cvsignore
  文件来让cvs忽略这个文件


    对C标记的测试:在两个工作区中同时修改同一个版本的文件number.txt,将其中的一行修改为不同的内容,然后commit提交一个,update另一个显示:
cvs update
cvs server: Updating .
RCS file: /export/home/cvsroot/test/aoxj/cvstest/number.txt,v
retrieving revision 1.6
retrieving revision 1.7
Merging differences between 1.6 and 1.7 into number.txt
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in number.txt
C number.txt
此时使用ls -a可以看到文件.#number.txt.1.6生成
. .#number.txt.1.6  ..  CVS  number.txt
打开merge后的number.txt文件,内容为
1
15
2
25
3
<<<<<<< number.txt
45
=======
46
>>>>>>> 1.7

三. CVS Environment /cvs 环境
   环境变量通常和CVS一起使用.
   CVSROOT   用来指定仓库的默认位置以及访问方法,设置了这个变量就无需使用CVS的全局-d选项.
   在windows中,可以增加CVSROOT到系统环境变量中,或者使用命令行:

 c:\ >  set CVSROOT = :pserver:username@hostname: / cvsrootpath

    在unix/linux中,对于bash,zsh,需要添加到profile文件中

export CVSROOT = :pserver:username@hostname: / cvsrootpath


cvs用法总结(2)--cvs命令import,add,release,remove

一. login登录
 cvs login
 会提示要求输入密码

二. logout 退出
 cvs logout

三. import 将源文件导入到cvs仓库
 cvs import [-d] [-k subst] [-I ign] [-m msg] [-b branch] [-W spec] repository vendor-tag release-tags...
 
 -d   将文件的修改时间作为导入时间
 -k sub  设置默认的RCS关键字替换模式
 -I ign  忽略文件(使用!重置)
 -b bra  分支的标识
 -m msg  日志信息
 -W spec  包装指定行

 使用范例
 (1)将一个新项目导入到仓库
  1.假设项目在本地文件夹testproject下,进入该目录,清除里面所有不需要提交的内容
  2.执行命令
   cvs import -m"test log message" -ko test/aoxj/ testprojuect test
  其中test/aoxj/指在仓库中的位置,testprojuect是项目名称,test发布标识
  3.可以用check 从仓库中获取这个新导入的项目
   cvs co test/aoxj/testproject


 (2)创建项目的另一个方法:建立一个空仓库在添加一个新项目
  1.迁出仓库的顶级目录
   cvs co -l -d tmp .
  2.在这个迁出的工作区中建立新项目,使用add命令加入仓库
   makedir newproject
   cvs add newproject
  3.测试删除这个签出的工作区
   cvs release -d tmp
  4.再次签出项目
   cvs co newproject

四. add 添加新文件/目录
 cvs add [-k rcs-kflag] [-m message] files...
 -k 使用rcs-kflag添加具有指定kflag的文件,通过使用"-kb"添加二进制文件到仓库中
 -m 使用message来创建日志

使用范例:
 (1)添加二进制文件
 cvs add -kb -m"add a binary file" test.doc
 如果不使用-kb,则默认是按照text格式提交,会破坏文件。
 (2)忘记-kb提交二进制文件的补救
  如果是进行了add但是还没有commit,则可以使用实现方法:
 1.忘了加-kb
  cvs add test.doc
 2.本地改名
  mv test.doc temp.doc
 3.删除文件
  cvs remove test.doc
 4.取回原来的文件
  mv temp.doc test.doc
 5.再次add并commit
  cvs add -kb test.doc
  cvs commit test.doc

  如果是commit之后才发现错误,最安全的方式是修改CVS仓库中的标记,然后再更新cvs仓库.

 1.错误的commit了文件
  cvs add test.doc
  cvs commit test.doc
 2.重置cvs仓库的标记
  cvs admin -kb test.doc
 3.重置本地工作区的标志
  cvs update -A test.doc
 4.从正确的文件覆盖本地工作区的文件 
  cp /**/test.doc test.doc
 5.提交到仓库
  cvs commit -m "new binary file" test.doc

五.admin 管理仓库
 cvs admin rcsoptions ...
 -k 使用"rcs-kflag"来改变与一个文件相关的标记,常用于将文件的状态修改为二进制(使用"-kb")



六. release 删除本地模块
 cvs release [-d] directories ...
 -d 删除给定目录的本地副本

 使用范例:
   cvs release -d test/aoxj/testproject
  这样会将本地工作区中的test/aoxj/testproject目录删除,但是不影响cvs仓库中文件

七. remove 从cvs仓库中删除条目
 cvs remove [-flR] [files ...]
 -f 在移除之前删除文件
 -l 只有本目录,不包括子目录
 -R 操作应用于子目录

 使用范例:
 (1) 从cvs仓库中删除文件
  cvs remove a.txt
  会报错,表示该文件在本地工作区中依然存在,需要先删除本地工作区中的文件
   cvs server: file `a.txt' still in working directory
   cvs server: 1 file exists; remove it first
  可以手工用rm命令删除,也可以使用-f参数在提交cvs remove命令前先删除文件
   cvs remove -f a.txt
  会出现提示
   cvs server: use 'cvs commit' to remove this file permanently
  表示本地副本已经被删除,要求用commit命令提交到仓库,如果这个时候使用update
  明亮,会看到
   R a.txt
  注意a.txt前面的R.最后在用commit提交删除仓库中的文件:
   cvs commit a.txt
 (2)从cvs仓库中删除文件夹
  cvs remove -fR foldername
  可以删除foldername文件夹下的文件,但是无法删除目录



////////////////////
1.安装CVS软件包.
2.groupadd cvs
3.useradd -g cvs cvsroot
4.chmod 777 -R /home/cvsroot
5.cd /etc
6.vi profile
新增以下二行:
CVSROOT=/home/cvsroot export CVSROOT
CVSEDIT=vi export CVSEDIT
7.查看/etc/services文件中cvspserver 所在行的注释状态(有则把注释去掉)
8.进入 /etc /xinetd.d, vi cvspserver该文件不存在,内容如下:
service cvspserver
{
disable = no
socket_type =stream
wait =no
user =root
env =HOME=
server =/usr/bin/cvs
server_args =--allow-root=/home/cvsroot pserver
log_on_failure +=USERID
}
9.vi /etc/xinetd.conf 内容如下,每次开机自动启动服务:
service cvspserver
{
port = 2401
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvsroot pserver
bind = 168.168.1.110
}
重新登录 换cvsroot用户
10./etc/init.d/xinetd restart
11.cvs init(初始化:CVS版本库的初始化)
12.cvs -d :pserver:cvsroot@192.168.1.110:/home/cvsroot login(用户登录)没有任何提示信息就成功。
13.首先要导入库,假设项目名称为LinuxISQuote.
步骤:
1、进入LinuxISQuote.
2、一个项目的首次导入
cvs import LinuxISQuote lch V_0_0_1
此时到$CVSROOT目录下,可以看到多了一个LinuxISQuote的目录。
阅读(3091) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~