CVS/CVSNT/WinCVS 有关 WinCVS 的使用

scmroad · 发布于 2008年6月17日 · 72 次阅读
96

[转自] [url]http://bbs.51testing.com/viewthread.php?tid=10797/url][

CVS版本控制常用操作说明 在进行版本控制的过程中, CVS是国际上最流行最成熟的版本控制系统之一,它能使我们的团队更好的在一起协同工作,使各自的程序一目了然,如果软件项目当前版本坏了,还可以通过CVS方便的恢复到一个好的版本。 CVS本来是工作在UNIX,LINUX下的,不过也出现的WINDOWS版本,包括服务器端(CVSNT)和客户端(WINCVS)。我们大多的操作是在客户端也就是WINCVS端完成,针对大家在实际工作中的问题,下面列出一些具体的操作方法及解决途径,欢迎大家共同讨论,指出不足,共同进步。 1.准备工作 1.1术语 Update---从cvs服务器下载新版本文件。当本地文件比服务器上的还新时,update将失败。 Commit---将本地更新过的文件提交到cvs服务器。如果本地文件比服务器上的还旧,commit将失败。 Import Module---将本地模块建立到服务器上(即在服务器上新建一模块)。 Checkout Module---从服务器上取出一个模块 Revision---文件版本,是单个文件的版本而非整个项目的版本 Release---发行版本,指整个产品的版本 Tag---标签 1.2目录及设置 在使用CVS之前,要在客户端电脑上建立一个空目录,用来存放CVS服务器下载下来的文件。安装好WinCvs(我这里版本为1.3)后,设置默认文件夹,点击"View"菜单,再点击"Browse Location",进入"Change"菜单,找到刚建立的空目录,点击确定即可。打开"Admin"菜单,点击"Preferences"子菜单。在 "General"页中,设置与cvs服务器有关的选项, a.设置"Authentication"(认证方式),选择"pserver"。 b.设置"Path"(cvs服务器上的仓库根目录)。 c.设置"Host address"( cvs服务器名)。 d.设置"User name"(用户名),输入个人的cvs帐号。 e.设置"CVSROOT"参数,这是cvs专用的参数格式,如下所示: username@servername:path 其中username是帐号,servername是服务器名,path是cvs服务器上的仓库根路径。如图

2.登录 点击"Admin"菜单,再点击"Login…"菜单,之后出现一个password对话框,输入密码,即可登入CVS服务器。登入后,wincvs将自动记住你的密码,下次使用wincvs时,可以不用人工登录。 3.建立模块 假设我们在本机的目录中有一个“技术研发”目录,此目录中有相关的文件,我们要将这个目录(该目录下必须有文件)作为一个模块(Module)建立到CVS服务器上。可以选择“技术研发”目录,点击右键,选择“Import Module”,如图

一般源代码等是TEXT格式的,而其它如图片,OFFICE文档等是二进制格式的。如果发现WinCvs列出的格式与实际的格式不符,可以在相应的项目上双击来修改格式。上传完成后,相应的目录就可以删除了。 4.Checkout、Commit 和Update操作 在WinCvs左边的树形目录上点击鼠标右键,进入"Checkout Module"菜单,输入你要checkout的模块的名字(注意大小写),再输入checkout下来后的存放目录,按"确定"按钮,这时,在 WinCvs的控制台输出code 0的成功信息。表明此次操作执行成功。 如果文件内容有改变,应即时提交到服务器上。如果我们修改了一个文件储存后,文件的图标变成红色,这时在此文件上点击右键,再点击“Commit selection…”菜单,出现code0信息表示命令执行成功。如果命令执行失败,可能是另外有人修改了这个文件并提交到了服务器。即服务器上的版本可能比你现有的文件还新,这时你有三种选择: a. 将服务器上的文件和本地的文件合并后再提交 先在文件上点击菜单命令"update…", 在弹出的对话框上什么都不要选,点击确定按钮,执行,合并后的文件前面有一个M标记。 b. 用本地的文件将服务器上的文件覆盖 在文件上点击菜单命令"commit…",在出来的对话框上切换到Commit options页,选择Force commit,如下图,

按确定,命令执行。 c. 用服务器上的文件将本地文件覆盖 在文件上点击菜单命令"update…",在出现的对话框中选择Get the clean copy,如果是在目录下有新目录增加,可选中Create missing directories that exist in the repository如下图,

按确定,命令执行。(注:如果选择的是目录进行Update,选中了Do not reurse into sub-folders意味着不对该目录的子目录进行Update;另外如选中 Reset any sticky date/tag/’-k’ options 意味着对选择对象标注的时间、标签进行重新设定) 更新过的文件为绿色,前面标有U标记。同时,WinCvs会自动在此文件的当前目录备份更新前的文件,文件名前面会加上".#",后面会加上版本号。 5.Add文件 如果在本机目录中新建了文件,必须用Add命令将它添加到cvs服务器,要将此文件加入到cvs,请先选择它(如有多个文件,可以多选),点击 "Modify"菜单中的"Add selection",如果是二进制文件,点击"Add binary"菜单,命令执行后,控制台的输出信息如下,返回代码为0表示命令执行成功。执行后文件前的图标变为红色,cvs就认为这是修改过的文件,你还必须用前面提到的Commit方法将文件提交到cvs服务器。也可以用点击快捷栏里的图标进行相关操作,如图

6.Remove文件 如果要将cvs中的文件删除,不能简单的将它从本机目录中删除,而必须借助Remove命令。不然的话,当你下次Checkout module时,在本机删除的文件又从服务器下载下来了。 假设我们现在要从cvs中删除newfile.txt文件。请先选择此文件(如有多个文件,可以多选),点击"Modify"菜单,再点击"Remove"菜单命令,这时控制台的输出code0成功信息,这时此文件已被做了删除标记,文件前的图标变为红色。 如要真正的从cvs服务器上删除此文件,还必须再执行一次commit命令。 7.Remove空目录 在WinCvs中只提供了删除文件的功能,如要删除一个目录,必须先将这个目录中的文件用上面介绍的方法清空,然后再在WinCvs的树形菜单中选中你要删除的目录的上层目录,将光标移到控制台窗口中,输入以下命令:cvs update –P 完成后再执行一次update命令,即完成删除,也可以点击右键选择Update selection..操作。 8.查看比较文件版本的历史沿革和差异 我们对一个文件,进行了多次修改和提交,使版本不断的升高,我们需要查看文件的版本历史,选中文件,然后选择主菜单Query,选择“Graph”菜单项,如图

如果比较两个版本的差异,在图中选择两个要比较的版本,比如比较1.4与1.2版本,先用鼠标选中1.4然后按下Ctrl键再选中1.2,在主菜单Graph中,选中Diff菜单项,就可以比较两个版本的差异了。 如果想获得文件的任意某个版本,先选择文件,进行Update操作,在Update的对话框中点击“Update option”栏目,在“By revision/tag/branch”处打上钩,并填写想取回的版本号,点击确定就可以了。 9.统一版本 如果在整个的开发过程中达到了某个稳定阶段,我们需要一个统一的固定版本号,而此时不同的文件修改的情况不同,需要进行版本号的统一。统一某一模块的版本号,在Checkout Module的时候,在弹出的Checkout settings对话框中选择Checkout option子栏目,然后钩上“Force revision/branch”,然后在它右边的编辑框中输入想提升的高版本号,注意这个版本号应该大于工作目录下所有文件的版本号。接着在刚选中的 Module上执行一次Update操作,我们需要在弹出的“Update settings”对话框中钩上“ Reset any sticky tag/date/tag/’-k’options”,去掉tag,以免影响今后的文件修改提交。

10.标签(Tag) 标签是cvs中对文件版本的一种文字描述,使用它是为了能够对版本进行有意义的表述,方便版本的存取。如在开发的过程中,某个文件或整个目录、 Module达到了稳定状态,此时在此版本号上加一个Tag,起名stable。在选中需要加标签的文件或目录、Module,然后在主菜单Modify 中,选择“create a tag on selection”,在New tag name 栏中填写stable,确定完成,在版本的历史图中更为清晰。还有在Update时,可以专门指定Update指定的Tag,在Update options中钩选Retrieve rev./tag/branch,右拦输入指定的Tag值,如我们刚创建的stable,点击确定就可以Upadate该标签的版本内容。 11.有关Branch的使用 如果软件已经达到了一个相对稳定的状态,下一步是想试验一种新加的功能,担心加入新内容后系统变的不稳定,希望能方便的回到目前的稳定状态,如果新内容加入后效果不错,也希望在这个基础上继续开发,此时可以用Branch来处理,把某些版本的变化与开发主线分离开。首先选定要创建分支的文件(或子目录或整个Module),选择主菜单Modify下的create a branch,先钩选“Check that the files are unmodified before branching”,在 create branch编辑框中填写分支名称,点击确定就可以啦。接下来就是要进入分支进行工作,进行Update 操作,在Update settings的对话框中,钩上“Create missing directories that exist in the respository”,在Update settings的对话框中,选择“Update options”中钩上“Retrieve rev./tag/branch”,并填写分支名,如“try_branch”,见下图,按“确定”按扭,工作目录下主文件消失了,branch文件出现了,就可以按一般的文件进行修改和提交了。

如果想从分支回到开发主线,有两种情况,一是把分支的工作带到主线上来,另外就是不带入主线,选择Module块进行Update操作,在 Update settings对话框中,钩上“Create missing directories that exist in the repository”,“Reset any sticky date/tag/’-k’options”,如果不想把分支的工作带入主线直接点“确定”就可以了。如果想接受分支工作,那么就进行Merge工作了,在Merge option栏,选择“Only this rev./tag”,并填写要Merge的分支名,点击确定即可,如下图:

最后在进行一次Commit就可以完全把分支的工作合并到开发主线上了。在版本的历史图中,可以看到,如下图:

12.补充 另外还有两个常用的命令: cvs ls :列出CVS服务器仓库中的模块名

cvs lsacl :列出目录或文件的访问管理列表

目前的CVS服务端、客户端有较新的版本,但也存在Bug,建议不要盲目下载新版本,可能不稳定,从而给工作带来不必要的麻烦。 有时WinCVS会变得异常缓慢 1). 确认安装了WinCVS的机器上没有安装CVSNT服务器端,因为它们使用的版本有可能不一致。 2). 只安装了WinCVS,但以前安装过其它版本的WinCVS, 先卸载所有的WinCVS系统,删除安装目录下的残留文件。 3). 打开注册表编辑器,全程查找cvs关键字,找到一个删除一个,一直到找不到为止。 4). 重新安装WinCVS,这个问题基本上就可以解决了。 这篇文档只是根据我们研发部门经常使用的实际情况而编写,希望能给大家带来帮助。CVS当中还有很多高级的用法,但相关的资料也很泛泛,更多的需要我们不断的实践才能知道怎么回事,因此,热烈欢迎大家一起积极探索,不断进步...

共收到 4 条回复
96
zoe · #1 · 2008年6月18日

嘎嘎,fofo,真用功~~~

96
admin · #2 · 2008年6月18日

e...................

96
zoe · #3 · 2008年6月30日

nnd,我同事跟我说,你update的时候必须选上后三个 俺们也没深究,选就选贝,你们用都没事,难道我还出问题啊? 结果呢,我在commit之前update一下,就把俺辛辛苦苦更新的东东给弄没了 心理还一直骂wincvs这么瓜,破烂工具 今天仔细看了下,:L ,崩溃~

看书要仔细啊~

4
laofo · #4 · 2008年7月01日

zoe 于 2008-6-30 21:53 发表
nnd,我同事跟我说,你update的时候必须选上后三个 俺们也没深究,选就选贝,你们用都没事,难道我还出问题啊? 结果呢,我在commit之前update一下,就把俺辛辛苦苦更新的东东给弄没了 心理还一直骂wincvs这么瓜,破烂工具 今天仔细看 ... [/quote]

有什么经验就多跟我们来交流交流嘛

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册