CVS简明使用手册

上一篇 / 下一篇  2007-01-12 16:33:01 / 个人分类:Linux

原文: http://www.chedong.com/tech/cvs_card.html

x!Pm-dd,m6qh TZ0

 51Testing软件测试网uk.lR-f%M

1cF!Z2]A ~,BQ0关键词:CVS CVSWeb CVSTrac WinCVS CVSROOT51Testing软件测试网(V$]]E/`5G/T;m

@y6QgPJO*s0内容摘要:

Abo {i8aq0

g;}r\Ty8T+h0CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。工作模式如下:

E4ZF-}q4d%P@0
CVS服务器(文件版本库)51Testing软件测试网a	`
]1d&{r
/ | \
"kOP;Or*H?0(版 本 同 步)
s\6Y-m;A6~Mx"p0/ | \51Testing软件测试网f)A"Z:c7d*ZA_.PU2p4]
开发者1 开发者2 开发者351Testing软件测试网#f@cCiW.m Y7|

:a F[ ?lq"[[0
1\sFE%u%w]4i0CVS环境初始化51Testing软件测试网"]rR"VM R3c3G

环境设置:指定CVS库的路径CVSROOT51Testing软件测试网.tR-C;?/c5H

export CVSROOT=:pserver:username@192.168.88.36:/home/cvsroot

I7@-gjr?VO%CM0

其中的username视你的用户名而更换

,W;X ^'QlR$`H0

使用CVSROOT环境变量登陆cvs:

|(EFp!gE0

cvs login51Testing软件测试网M!w1Sm/d5l6E I

或者用-d指定,将会覆盖CVSROOT的设定:51Testing软件测试网Y,d"A1X@_

cvs –d “:pserver:username@192.168.88.36:/home/cvsroot” login

wDnF S$I+v&u!d'n0

退出:

}RbLN0lP0

cvs logout

4?zt4m%KrzCP0

或者51Testing软件测试网,re y[%sS,q)f^tD

cvs –d “:pserver:username@192.168.88.36:/home/cvsroot” logout

!_l n8zo&}-` Y$w0

 

hx2E2q_!G0

2.    项目的导入与导出51Testing软件测试网h#m X'z~R6MR/Z

 51Testing软件测试网"~X1E)E6n6Lq

一个项目的首次导入51Testing软件测试网%f5^]4x3J$Q%U8xX;e

cvs import -m "comments" project_name vendor_tag release_tag51Testing软件测试网,W G9^.W)fI

执行后:会将所有源文件及目录导入到/home/cvsroot/project_name目录下

)e4z1ecW)L/S|0

vender_tag: 开发商标记(其实这是一个标记tag)

'^rfT~ f?0

release_tag: 版本发布标记(其实这是一个分支branch)

4^My5c2]I _tb,`0

项目导出:将代码从CVS库里导出

'[9va#{+kC4_P0

cvs checkout project_name51Testing软件测试网!fn|-T[[L8H L"z

cvs 将创建project_name目录,并将最新版本的源代码导出到相应目录中。51Testing软件测试网GR)hEDP_2f%[

注意:项目第一次导出以后,就不是通过cvs checkout来同步文件了,而是要进入刚才cvs checkout project_name导出的project_name目录下进行具体文件的版本同步(添加,修改,删除)操作。

]7w9C/wU0

常用命令有checkout、commit、status、update、remove等,分别对应缩写co、ci、st、up、rm51Testing软件测试网-V ML[T*\/gTM4o

 51Testing软件测试网S ea6`(|2h(rc:MM

3.    查看状态

,M*Q4b(UhZ j"i0

 51Testing软件测试网)DM6tg&bC4s

下面的命令用于查看文件的状态,不带文件名则为查看当前目录下所有文件的状态

KJ&_7F9m-w3uxQqY0

cvs status file_name

R k5X&]1KI0

 

zj!g^i-|^ I0

可能的状态有:

Yn1oQT0

Up-to-date   :最新版,本地与服务器一致

8R#E V xc t#R A-JR!J0

Locally Modified:本地已修改,可提交51Testing软件测试网;j!N9n"Z'e B t!X3{t$n

Needs Patch  :服务器已修改,需更新51Testing软件测试网 G"~bo)b\

Needs Merge  :本地与服务器均有修改,需合并51Testing软件测试网:U*k@tcjj^

 51Testing软件测试网N8D5[1a*{J t8v'D4F

4.    将文件同步到最新的版本

]9T+W;k9t"Se0

 

Q-fF'R(Lxzn5p0

cvs update51Testing软件测试网Yv~-S-kGfG

不指定文件名,cvs将同步所有子目录下的文件,也可以指定某个文件名/目录进行同步51Testing软件测试网e9PQ/R:K0Q5@{

cvs update file_name

n^G-?U^0

最好每天开始工作前或将自己的工作导入到CVS库里前都要做一次,并养成“先同步 后修改”的习惯,如果你修改过程中,有其他人修改并commit到了CVS 库中,CVS会通知你文件冲突,并自动将冲突部分用

7d4M"B DdiV@0

<<<<<<

P-\ V8F!X Yb0

content in your file51Testing软件测试网`wZ3K6T)z

======51Testing软件测试网x^5G v|.L a$Y

content on cvs server

!P3DP1wp-Pa y/v0

>>>>>>

&A$Wdn&XVs0

标记出来,由你确认冲突内容的取舍。51Testing软件测试网]n-XkF7R9O0U

版本冲突一般是在多个人修改一个文件造成的,但这种项目管理上的问题不应该指望由CVS来解决。51Testing软件测试网E[%VhM6s

 51Testing软件测试网-h:GNe|

5.    提交你的修改

1[b,A8VvBB0

 51Testing软件测试网2^m-|"H/R7r d+X

cvs commit -m "write some comments here" file_name

rhI {,} R:Zs0

注意:CVS 的很多动作都是通过cvs commit进行最后确认并修改的,最好每次只修改一个文件。在确认之前,还需要用户填写修改注释,以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话,cvs会自动调用系统缺省的文字编辑器要求你写入注释。51Testing软件测试网]9x+I\8F&eg4^

注释的质量很重要,所以不仅必须要写,而且必须写一些比较有意义的内容,以方便其他开发人员能够很好的理解51Testing软件测试网r8` i0OQ,F

不好的注释,很难让其他的开发人员快速的理解:比如:-m "bug fixed" 甚至 -m ""

'r,D.}q:N0q~\4l0

好的注释,甚至可以用中文: -m "在用户注册过程中加入了Email地址校验"

tV:R5A%Q9RH(y0

修改某个版本注释:每次只确认一个文件到CVS库里是一个很好的习惯,但难免有时候忘了指定文件名,把多个文件以同样注释commit到CVS库里了,以下命令可以允许你修改某个文件某个版本的注释:51Testing软件测试网3xF`+pH$_-Mr

cvs admin -m 1.3:"comments" file_name

9tu)r4~&{K9kT2}/v0

6.    添加/删除文件和目录51Testing软件测试网5m:Xs2c!kzG+bA:B a

 

HE,L+E5PhfK0

创建好新文件后,执行

0w1]#buo,}0

cvs add new_file51Testing软件测试网]'n+a+EJ6J&py(t K4D%{

此时仅仅是把该文件列入计划,然后必须提交:51Testing软件测试网;U8eoK M#I

cvs ci –m “add new_file” new_file51Testing软件测试网'[ Z*{?F0w

注意:对于图片Word文档等非纯文本的项目,需要使用cvs add -kb选项按2进制文件方式导入(k表示扩展选项,b表示binary),否则有可能出现文件被破坏的情况51Testing软件测试网 g$U9jJPQ[A

比如:

vfE8l.v0

cvs add -kb new_file.gif

&_%W%W%P} eYK0

cvs add -kb readme.doc51Testing软件测试网%K+evI AqvK @8n$S

 51Testing软件测试网,s:JHSRm,^

将某个源文件物理删除后,比如:rm file_name51Testing软件测试网-u] [|6x:Pd:e4h

cvs rm file_name51Testing软件测试网|Bb#uK6|^J(m

然后确认修改并注释

!f"MDp8x)PLOp0e0

cvs ci -m "write some comments here" file_name51Testing软件测试网:r6N oM)`&b

以上面前2步合并的方法为:

0{m"V+Idw i"n ^:{0

cvs rm -f file_name51Testing软件测试网#y?s2m7M3[]@3B

cvs ci -m "why delete file" file_name51Testing软件测试网k;xh0gm7S5nb

 51Testing软件测试网 L\xb2`L

cvs里没有cvs move或cvs rename,因为这两个操作是可以由先cvs remove old_file_name,然后cvs add new_file_name实现的。

a6gmm-q^ ]O0

 51Testing软件测试网3{J0h0Ck;^ Rq

创建好目录后,执行51Testing软件测试网$F|4L)e6lqc

cvs add dir_name

WYj.RBk A&e(C0

即可添加目录51Testing软件测试网Dj.H`2E)Q:f

 51Testing软件测试网9G o Y$saGx&|s5so'BN

CVS中删除目录必须先删除目录中的文件,然后用cvs up –P通知服务器删除空目录

'P'w{;g6EFwj/f0

移动目录则必须51Testing软件测试网KC8}zsC,A

1.创建目录51Testing软件测试网 L&E]h`/JD3p

2.创建目录中的文件51Testing软件测试网6b*|J(b9C`O#b%@l

 在本地把文件移动到新目录中,然后参照添加文件的方法在服务器中添加文件

'Bf,r{ Dl`2^$D0

3.删除旧目录中的文件,然后用cvs up –P通知服务器删除空目录

&R5Cui;|!Qc0

目录重名名按照移动目录的方法进行操作。51Testing软件测试网;E*TJ e$w_ j h2U

 51Testing软件测试网%Hu(H1[0hQ

7.    查看修改历史

;Qr'P)nv#d-U}4h0

 

[!J|h*cBsK?H0

cvs log file_name

9uA3|G-U0

cvs history file_name

Kv5JD+d+N"z0

 

O@2W'\V)~bsgv0

8.    查看当前文件不同版本的区别

7y+nq&_Sw9K ca8Ja0

 

|6Dz0lpmV n0

cvs diff -r1.3 -r1.5 file_name51Testing软件测试网't0j}"B4j8Y~#P.S

查看当前文件(可能已经修改了)和库中相应文件的区别

&r:F;O)I%k"@#l0

cvs diff file_name

/T1@'u*lm0

 

ee7x.I;E{3}%y0

9.    通过CVS恢复旧版本

1GReiI/gkl9h0

 

IwR&d#~ t3L;y0

正确的恢复版本的方法是:cvs update -p -r1.2 file_name>file_name51Testing软件测试网sbT4q/_ND&yk!]

 

.JE pH|g8D%i0

10. 导出不带CVS目录的源文件51Testing软件测试网6eSB6v&X2A

 

W j$`V)zw0

做开发的时候你可能注意到了,每个开发目录下,CVS 都创建了一个CVS/目录。里面有文件用于记录当前目录和CVS库之间的对应信息。但项目发布的时候你一般不希望把文件目录还带着含有CVS信息的CVS 目录吧,这个一次性的导出过程使用cvs export命令,不过export只能针对一个TAG或者日期导出,比如:51Testing软件测试网,lo'`(P? `

cvs export -r release1 project_name51Testing软件测试网:W~9N X7E2U-R

cvs export -D 20021023 project_name51Testing软件测试网Q#AFt+k7vD,G

cvs export -D now project_name

A?9FV:A6rP%n1[0

 51Testing软件测试网5d iX-xqj{ DxM

11. 打标记

!^{"`Z f/V;t0

 51Testing软件测试网T'_ \#h K!T

多个文件各自版本号不一样,项目到一定阶段,可以给所有文件统一指定一个阶段里程碑标记,方便以后按照这个阶段里程碑标记导出项目,同时也是项目的多个分支开发的基础。

Bb g lw:?0

cvs tag release_1_051Testing软件测试网I\{qY/zv

 51Testing软件测试网n*J(],EC;veH's s

12. 开始一个新的里程碑51Testing软件测试网7mg`Vn&f+O

 51Testing软件测试网U#iLT-LvT7Z

cvs commit -r 2 标记所有文件开始进入2.x的开发51Testing软件测试网%@d%_ze1Y fT/Q

注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。

\s"k#N7X$G0

 

Ep]pu2cX0

13. 版本分支的建立

#nX8T!IWALR0

 

"P*oU^U(}x#x0

在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支 release_1_0_patch

S(U+m9bG0

cvs rtag -b -r release_1_0 release_1_0_patch project_name

A ~r#j8\(cM:X:P0

一些人先在另外一个目录下导出release_1_0_patch这个分支,解决1.0中的紧急问题51Testing软件测试网Q)qC9lS

cvs checkout -r release_1_0_patch51Testing软件测试网2C6~lP}aw6u[7?i

而其他人员仍旧在项目的主干分支2.x上开发

/r f7{ ?9cBhHG0

release_1_0_patch上修正错误后,标记一个1.0的错误修正版本号

@6~g+s'?0k0

cvs tag release_1_0_patch_151Testing软件测试网|R}8T4A$f-Q7B

如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中:

3eIRC4b5J_0

cvs update -j release_1_0_patch_151Testing软件测试网1qL {W!@ G*lG

 

cy {B:Y)y9o!z/DI/On0

14. 使用锁

$@M:t%d dn,nk0

 51Testing软件测试网c2s|&j0Vs^G#qTq

默认方式下,CVS允许多个用户编辑同一个文件,这对一个协作良好的团队来说不会有什么问题,因为多个开发者同时修改同一个文件的同一部分是不正常的,这在项目管理中就应该避免,出现这种情况说明项目组内部没有统一意见。而多个开发者修改文件的不同部分,CVS可以很好的管理。

,l F,@*j2H0

对于文本格式,CVS可以进行历史记录比较、版本合并等工作,而二进制文件不支持这个操作。对于二进制方式,由于无法进行合并,在无法保证只有一个用户修改文件的情况下,建议使用加锁方式进行修改。或者你认为你的修改很重要,需要其它开发者暂停提交,也可以使用锁

7d#?R/_"q0

cvs admin -l file_name

/Y-i t M%Tmp0

锁定后其他用户就无法提交。当修改完毕提交后,锁将会自动解除。如果未修改而需要解锁,执行51Testing软件测试网#I8U6oD|N'L.sM

cvs admin -u file_name51Testing软件测试网;V'L.{(Q^7G^pB

即可解除。锁无法由别的用户来解,所以锁定文件的开发者必须记得提交或解锁。

f ?n!s,m0

 51Testing软件测试网)DV,`1{4z}M\9h

15. 关键字扩展

.? |6sl\Fk;z0

 

,n0W3}+x-yiT6j0

CVS提供许多关键字扩展的功能,当你提交时,CVS自动把关键字进行扩展,并填入你的源文件。常见的关键字有

5h"X xr`0

$Author$51Testing软件测试网 S3tFQ2GI1Q

$Date$

)cP7em*]1Y0

$Header$51Testing软件测试网A3a!d#\aW"P

$Id$

E/U8u6i.i'U0

$Locker$

f E@2Y.S%\x*^0

$Name$

!C/i-u:s4x/g)pvt0

$RCSfile$

Wo#U6`'}ulz0

$Revision$51Testing软件测试网y*f^+R~&m

$Source$

#R7Wr$~&~3M1r"Vl0

$State$51Testing软件测试网IU'IKg5Y

$Log$

'DJ1}P;lc0

其中比较有用的有$Log$,添加这个标记之后,每次提交的版本、时间、开发者及注释等信息都被自动记录到源文件中,而$Id$这个标记则自动更新当前的版本号、更新时间和更新者等信息。

'~3o*rc4hht0

 

*eg/h0|)R9zo0

建议的使用流程:51Testing软件测试网{]g*fDY.Bf

1.登陆CVS(login)

$F$vcd7B.U e[9| wp0

2.首次使用则需要checkout,之后每次工作之前先查询状态(status),有需要更新则update51Testing软件测试网v[r:dA2Fb!I:B'V

3.如果需要,上锁51Testing软件测试网;aNr,be/y2K-I

4.修改程序

g%jIf `XR"]0

5.再次查询状态

GG I P$D-S&w p$VJ$?J0

6.根据状态,对比二者的差异(diff),进行合并

v%t5P fo/P8d0

7.提交修改

xNPBq-j0

8.如果放弃修改,恢复到旧版本并解锁

;qk;H6FF#n/e0

9.每过一段时间查询服务器状态,及时更新到最新版51Testing软件测试网F ` `Z$z iV


TAG: Linux

 

评分:0

我来说两句

日历

« 2024-03-04  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 231086
  • 日志数: 135
  • 图片数: 4
  • 文件数: 1
  • 书签数: 1
  • 建立时间: 2006-12-11
  • 更新时间: 2022-10-31

RSS订阅

Open Toolbar