CVS 版本管理介绍
产品四部 黄昌发
1 概述
1.1 前言
CVS 的全称是Cuncurrent Versions System,是一种GNU 软件包,由Intersolv 公司开发。它是基于TCP/IP协议的版本控制工具,也是开源界最重要的开发工具之一。
CVS 采用Client/Server结构,所有的用户都在客户端进行CVS 操作,而所有命令的执行都在CVS 服务器端进行。
CVS 是一种基于RCS (Revision Control System修订控制系统)系统的维护工具,它明确的将源文件的存储和用户的工作空间独立开来,在一定的模式上扩展了RCS 的恢复提交功能,并使其有利于并行开发,是一个版本控制系统。
CVS 不采用对文件上锁的机制。CVS 采取多个用户可以同时对一个文件进行编辑,然后Commit (提交)的方式解决这个问题。假设出现冲突,使用者必须手工解决冲突之后再进行Commit 。在这种情况下,冲突的开发者必须进行足够的沟通以避免再次冲突。
理论上CVS 可以维护任意的文本文档的开发,而不是局限于程序设计。
1.2 存储结构
仓库(Repository ):
CVS 服务器上,一个源代码仓库被称为一个Repository 。
Repository 是CVS 系统保存软件资源的地方。所有项目的所有文件的所有版本都保存在这个仓库中。 一个服务器上可以运行多个Repository ,每个Repository 都是完全独立的,可以有不同的用户列表和访问规则。
上图的E:/cvshome就是一个Repository ,对应着硬盘上的一个文件夹。
模块(Module ):
在一个Repository 之下,文件按照Module 组织,一个Module 就是一个子文件夹。 每一个Module 就相当于一个工程,大致相当于Eclipse 里面的Project 。 一个软件工程通常作为一个单一模块存放在库中。
也可以多个软件工程作为存放在一个模块中。
工作拷贝(Working Copy):
工作拷贝是从CVS 服务器端取出的,保存在我们正在使用的客户端计算机上的代码拷贝。 一个项目在开发的过程中会有多个工作拷贝。 典型的情况是一个开发小组在开发一个项目,所有的小组成员都共用同一个CVS 服务器,共用同一个CVS 仓库,共用该项目在CVS 仓库中的同一个版本库,但是每个小组成员都有一个属于自己的工作拷贝。
每个人的工作拷贝在工作过程中独立进行修改,互不干扰。大部分情况下,这些工作拷贝各不相同。
1.3 版本结构
HEAD (主线):
任何一个模块(Module )都有一个主要路径。
对于项目,所有的文件在主线上形成该项目最新一个快照。
对于文件,主线上的文件代表了该文件在主要路径上的最新内容。 主线只有一条。
Version (版本):
对于整个项目,一个版本就是不停改变的项目在某个时间点上的一个快照。 对于文件,表了该文件在某个时间点上的内容。 一个Version 是通过Tag 操作基于主线创建的。 一个项目可以有多个Version 。
Branch (分支):
分支就像一棵正常生长的代码树中的枝杈。
分支代表了正在开发调试中、尚未正式发布的代码。
一个分支最终要么被合并到主线中去,要么被放弃。如果一个补丁包发布了,相应分支的代码应该被合并到主线上去。
一个分支也可能经历多次与主线的合并。 一个Branch 是基于某个Version 创建的。
一个项目可以有多个Branch 。
1.4 命令格式
CVS 的使用有两种方式:一是本机使用,一是远程执行。 本机使用是通过命令行窗口进行的。
远程执行则是通过客户端工具进行。例如WinCVS 工具、Eclipse 中的CVS 插件等。
CVS 的命令格式是:
cvs [cvs的选项] cvs-command [command 选项]
例如,查看CVS 的帮助信息:
cvs -H command
2 CVS 服务器
2.1 Wind ows 下安装
直接运行安装文件(cvsnt-2.0.41.exe ),即可完成安装。
2.2 服务器配置
运行Service control panel,出现CVS 的服务控制面板。
配置Repository :
其他配置:
CVS 用户: CVS 用户和密码,采用本机操作系统的用户和密码。也可以采用域用户进行认证。
3 Eclipse 中CVS 操作
3.1 仓库配置(Repository )
打开CVS Repositories视图:
点击快捷菜单Repository Location:
例如:
Host :
CVS 服务器IP 地址或机器名。 Repository Path:
CVS 服务器上配置的Repository Root。
需要注意的是路径名称的大小写、斜杠必须与服务器完全一致。 User & Password: CVS 服务器的本机操作系统用户和密码。 点击【Finish 】按钮,即可完成Repository 配置。
3.2 项目检出(Check Out)
从服务器取出代码,这也就是创建工作拷贝的过程。
根据CVS 的工作原理,如果要改动代码,我们应该先把代码从CVS 服务器中Check Out 到独立的工作目录,然后进行必要的修改,完成后再把经过修改的代码重新提交到服务器。
从CVS 服务器取出代码的时候,CVS 会根据用户的要求逐个检查文件的版本,选择正确的版本发送给用户。
打开CVS Repositories视图:
在要检出的项目(Module )上,点击Check Out快捷菜单:
或者点击Check Out As快捷菜单。
Check Out As 与Check Out的区别在于可以改变项目名称和路径,以及改变其他一些选项,如图。
检出之后,在Eclipse 中的包浏览器(Package Explorer)视图如下:
3.3 项目导入(Import )
将未被CVS 进行版本管理的代码引入CVS 系统之中,由CVS 开始对它进行版本管理。
打开Eclipse 中的包浏览器:
在需导入的项目名称上打开右键快捷菜单:
点击“Share Project”菜单:
选择仓库类型“CVS ”,继续:
选择一个已配置的仓库,继续:
采用项目名称作为Module 名称(也可以根据需要换一个名称),继续:
确定要导入的项目文件,点击【Finish 】按钮,即导入完成。
3.4 提交(Commit )
开发人员在修改好代码后,将文件送到服务器保存(又叫作Check In)。
CVS 在将代码存入服务器的时候要进行版本检查,以及做相应的记录。
在Eclipse 中,修改过的文件具有>标记:
在修改的文件上右键打开“Team ”快捷菜单:
点击【Commit …】菜单项,打开Commit 窗口:
输入注释,点击【Finish 】按钮,即完成该文件的提交。
可以对一个项目、一个目录下的所有文件进行批量提交。
只能对主线和分支中的文件进行Commit 操作。
可以通过Commit 操作来增加、删除文件或目录。
由于CVS 对文件名不区分大小写,并且对文件和目录的重命名没有提供较好的支持,操作很麻烦,所以,要慎重命名文件和目录。
3.5 更新(Update )
在协同开发的环境下,将其他人所作的最新修改从CVS 服务器中取到你的工作拷贝中,从而使得你的工作拷贝与服务器中的最新版本保持一致,也与项目的最新进展保持一致。
更新是同步各个工作拷贝的手段。
在项目名称上右键打开“Team ”快捷菜单:
点击【Update 】菜单项,即可完成本机文件的更新。
3.6 同步(Synchronize )
3.6.1 Synchronize 视图
上面的Update 操作是静默执行的,并没有给用户确认的机会,如果需要在更新时进行更多的控制,可以使用同步操作。
在项目名称上右键打开“Team ”快捷菜单,点击【】菜单项,将自动打开Synchronize 视图:
上图中:
表示服务器上新增的文件。可进行更新操作。
表示服务器上修改过的文件。可进行更新操作。
表示本机上新增的文件。可进行提交操作。
表示本机上修改的文件。可进行提交操作。
右键点击文件,可打开快捷菜单:
通过快捷菜单,可以对相关文件进行Update 和Commit 操作。
3.6.2 比较(Compare )
双击文件名,或者点击快捷菜单的“”,可打开比较窗口,详细查看本机和服务器上的文件内容差异。
通过比较窗口右上方的工具栏,可以方便地把服务器上的修改内容合并到本机文件中。
3.6.3 冲突(Conflict )
在协同开发的环境下,当两个开发人员对同一个文件的同一行代码进行修改,并且依次提交CVS 服务器的时
候,就发生了冲突。因为CVS 不能在同一个目录里保存两个相同名字的文件,而对同一个文件,它的一行代码只会是一种结果,而不是两种。
在同步视图中,可看到文件冲突如下。
这种冲突需要开发者手工消除,并提交到CVS 服务器中形成解决冲突之后的新版本。
首先,需要进行文件比较,把服务器上的修改内容合并到本机文件中。
然后,右键点击文件,打开快捷菜单:
点击“Mark as Merged”菜单项,把该文件标记为已解决冲突的修改状态:
再进行Commit 即可。
如果要放弃本机的修改内容,也可以点击“Override and Update ”菜单项,用服务器上的文件覆盖本机的文件内容。
3.7 分支(Branch )
3.7.1 切换分支(Switch )
默认情况下,我们在主线上工作,如图。
但实际上,我们大多需要在分支中进行开发。因此,需要将本地工作拷贝从主线切换到分支中。
注意,在切换之前,请确保本地工作拷贝不存在已修改尚未提交的文件。
在项目名称上右键打开“Team ”快捷菜单,点击【】菜单项,弹出窗口如下:
选择“”选项,并且点击【Refresh Tags】按钮:
展开“Branches ”目录,选中要切换的分支名称,点击【Finish 】按钮。
切换完成时包浏览器的显示如下,说明工作拷贝已经切换到分支上了:
在分支上,我们可以像在主线上一样进行更新、提交等操作,并且不影响主线上的文件。
可以按照同样的方法,切换到某个Version 上。
3.7.2 创建分支
一个分支是基于某个基线版本(Version )创建的。
在创建分支之前,请确保本地工作拷贝已切换到要创建分支的Version 上。
首先,按照切换分支的方法,把本地工作拷贝切换到要创建分支的Version 上。
在项目名称上右键打开“Team ”快捷菜单,点击【】菜单项,弹出窗口如下:
输入分支名称,例如V20120727_B1,点击【OK 】按钮,即可完成分支的创建。 因为分支在创建后无法删除或改名,所以请慎重进行创建操作。
3.7.3 合并主线
将主线的最新内容合并到分支中。
在合并之前,请确保本地工作拷贝已切换到要分支上,并且分支已经同步过。
合并是通过比较进行的。
在项目名称上右键打开“口如下: ”快捷菜单,点击【】菜单项,弹出窗
选择“HEAD ”标记,点击【OK 】按钮,将自动打开Synchronize 视图。
在文件比较后,通过右键快捷菜单“Replace ”,可将主线上的内容更新到分支中。
3.7.4 合并分支
将分支的最新内容合并到主线中。
在合并之前,请确保本地工作拷贝已切换到要主线上,并且主线已经同步过。
合并也是通过比较进行的。
在项目名称上右键打开“口如下:
”快捷菜单,点击【】菜单项,弹出窗
选择要合并的分支标记,点击【OK 】按钮,将自动打开Synchronize 视图。
在文件比较后,通过右键快捷菜单“Replace ”,可将分支上的内容更新到主线中。
3.8 版本(Version )
3.8.1 切换版本(Switch )
可以按照切换分支的方法,把本地工作拷贝切换到要某个Version 上。
要注意,切换后的本地工作拷贝是只读的,不允许进行Commit 操作。
3.8.2 创建版本
一个版本是在主线基础上创建的。
在创建版本之前,请确保本地工作拷贝已切换到要主线上,并且主线已经同步过。
在项目名称上右键打开“Team ”快捷菜单,点击【】菜单项,弹出窗口如下:
点击【Details 】按钮可以看到已经存在的所有版本标记。
输入要创建的版本标记名称,点击【OK 】按钮,即可完成版本标记的创建。
因为版本在创建后无法删除或改名,所以请慎重进行创建操作。
3.9 历史(History )
查看一个文件的修改历史。
在文件名称上右键打开“Team ”快捷菜单,点击【】菜单项,显示History 窗口如下:
Revision (修订):
文件的修订版本。
当增加一个文件到CVS 的时候,它会有一个初始Revision 是1.1,以后每次提交,就会增加到1.2,
1.3„„
Tag (标记):
Tag 用来进行标识必要的信息,包括Version 和Branch 标记。
Author (作者):
文件修订的作者,即提交人的用户名。
Comment (注释):
用来记录每次操作的内容和目的的信息。
在提交和导入等操作的时候,操作者必须提供一些注释信息。这些注释对于跟踪软件的变化过程十分
重要。
窗口右上角有一个工具栏:
这个工具栏可以控制History 窗口的显示方式。
在某一行记录上,点击右键,将弹出如下的快捷菜单: 表示Version , 表示Branch 。
通过这个快捷菜单,可以进行该文件的各个修订版本的查看、两个版本的文件比较、移动版本标记、显示注解视图等操作。
3.10 其他
CVS 还具有其他一些有用的功能,例如文件恢复、日期标记等,请自行参考相关资料。
CVS 版本管理介绍
产品四部 黄昌发
1 概述
1.1 前言
CVS 的全称是Cuncurrent Versions System,是一种GNU 软件包,由Intersolv 公司开发。它是基于TCP/IP协议的版本控制工具,也是开源界最重要的开发工具之一。
CVS 采用Client/Server结构,所有的用户都在客户端进行CVS 操作,而所有命令的执行都在CVS 服务器端进行。
CVS 是一种基于RCS (Revision Control System修订控制系统)系统的维护工具,它明确的将源文件的存储和用户的工作空间独立开来,在一定的模式上扩展了RCS 的恢复提交功能,并使其有利于并行开发,是一个版本控制系统。
CVS 不采用对文件上锁的机制。CVS 采取多个用户可以同时对一个文件进行编辑,然后Commit (提交)的方式解决这个问题。假设出现冲突,使用者必须手工解决冲突之后再进行Commit 。在这种情况下,冲突的开发者必须进行足够的沟通以避免再次冲突。
理论上CVS 可以维护任意的文本文档的开发,而不是局限于程序设计。
1.2 存储结构
仓库(Repository ):
CVS 服务器上,一个源代码仓库被称为一个Repository 。
Repository 是CVS 系统保存软件资源的地方。所有项目的所有文件的所有版本都保存在这个仓库中。 一个服务器上可以运行多个Repository ,每个Repository 都是完全独立的,可以有不同的用户列表和访问规则。
上图的E:/cvshome就是一个Repository ,对应着硬盘上的一个文件夹。
模块(Module ):
在一个Repository 之下,文件按照Module 组织,一个Module 就是一个子文件夹。 每一个Module 就相当于一个工程,大致相当于Eclipse 里面的Project 。 一个软件工程通常作为一个单一模块存放在库中。
也可以多个软件工程作为存放在一个模块中。
工作拷贝(Working Copy):
工作拷贝是从CVS 服务器端取出的,保存在我们正在使用的客户端计算机上的代码拷贝。 一个项目在开发的过程中会有多个工作拷贝。 典型的情况是一个开发小组在开发一个项目,所有的小组成员都共用同一个CVS 服务器,共用同一个CVS 仓库,共用该项目在CVS 仓库中的同一个版本库,但是每个小组成员都有一个属于自己的工作拷贝。
每个人的工作拷贝在工作过程中独立进行修改,互不干扰。大部分情况下,这些工作拷贝各不相同。
1.3 版本结构
HEAD (主线):
任何一个模块(Module )都有一个主要路径。
对于项目,所有的文件在主线上形成该项目最新一个快照。
对于文件,主线上的文件代表了该文件在主要路径上的最新内容。 主线只有一条。
Version (版本):
对于整个项目,一个版本就是不停改变的项目在某个时间点上的一个快照。 对于文件,表了该文件在某个时间点上的内容。 一个Version 是通过Tag 操作基于主线创建的。 一个项目可以有多个Version 。
Branch (分支):
分支就像一棵正常生长的代码树中的枝杈。
分支代表了正在开发调试中、尚未正式发布的代码。
一个分支最终要么被合并到主线中去,要么被放弃。如果一个补丁包发布了,相应分支的代码应该被合并到主线上去。
一个分支也可能经历多次与主线的合并。 一个Branch 是基于某个Version 创建的。
一个项目可以有多个Branch 。
1.4 命令格式
CVS 的使用有两种方式:一是本机使用,一是远程执行。 本机使用是通过命令行窗口进行的。
远程执行则是通过客户端工具进行。例如WinCVS 工具、Eclipse 中的CVS 插件等。
CVS 的命令格式是:
cvs [cvs的选项] cvs-command [command 选项]
例如,查看CVS 的帮助信息:
cvs -H command
2 CVS 服务器
2.1 Wind ows 下安装
直接运行安装文件(cvsnt-2.0.41.exe ),即可完成安装。
2.2 服务器配置
运行Service control panel,出现CVS 的服务控制面板。
配置Repository :
其他配置:
CVS 用户: CVS 用户和密码,采用本机操作系统的用户和密码。也可以采用域用户进行认证。
3 Eclipse 中CVS 操作
3.1 仓库配置(Repository )
打开CVS Repositories视图:
点击快捷菜单Repository Location:
例如:
Host :
CVS 服务器IP 地址或机器名。 Repository Path:
CVS 服务器上配置的Repository Root。
需要注意的是路径名称的大小写、斜杠必须与服务器完全一致。 User & Password: CVS 服务器的本机操作系统用户和密码。 点击【Finish 】按钮,即可完成Repository 配置。
3.2 项目检出(Check Out)
从服务器取出代码,这也就是创建工作拷贝的过程。
根据CVS 的工作原理,如果要改动代码,我们应该先把代码从CVS 服务器中Check Out 到独立的工作目录,然后进行必要的修改,完成后再把经过修改的代码重新提交到服务器。
从CVS 服务器取出代码的时候,CVS 会根据用户的要求逐个检查文件的版本,选择正确的版本发送给用户。
打开CVS Repositories视图:
在要检出的项目(Module )上,点击Check Out快捷菜单:
或者点击Check Out As快捷菜单。
Check Out As 与Check Out的区别在于可以改变项目名称和路径,以及改变其他一些选项,如图。
检出之后,在Eclipse 中的包浏览器(Package Explorer)视图如下:
3.3 项目导入(Import )
将未被CVS 进行版本管理的代码引入CVS 系统之中,由CVS 开始对它进行版本管理。
打开Eclipse 中的包浏览器:
在需导入的项目名称上打开右键快捷菜单:
点击“Share Project”菜单:
选择仓库类型“CVS ”,继续:
选择一个已配置的仓库,继续:
采用项目名称作为Module 名称(也可以根据需要换一个名称),继续:
确定要导入的项目文件,点击【Finish 】按钮,即导入完成。
3.4 提交(Commit )
开发人员在修改好代码后,将文件送到服务器保存(又叫作Check In)。
CVS 在将代码存入服务器的时候要进行版本检查,以及做相应的记录。
在Eclipse 中,修改过的文件具有>标记:
在修改的文件上右键打开“Team ”快捷菜单:
点击【Commit …】菜单项,打开Commit 窗口:
输入注释,点击【Finish 】按钮,即完成该文件的提交。
可以对一个项目、一个目录下的所有文件进行批量提交。
只能对主线和分支中的文件进行Commit 操作。
可以通过Commit 操作来增加、删除文件或目录。
由于CVS 对文件名不区分大小写,并且对文件和目录的重命名没有提供较好的支持,操作很麻烦,所以,要慎重命名文件和目录。
3.5 更新(Update )
在协同开发的环境下,将其他人所作的最新修改从CVS 服务器中取到你的工作拷贝中,从而使得你的工作拷贝与服务器中的最新版本保持一致,也与项目的最新进展保持一致。
更新是同步各个工作拷贝的手段。
在项目名称上右键打开“Team ”快捷菜单:
点击【Update 】菜单项,即可完成本机文件的更新。
3.6 同步(Synchronize )
3.6.1 Synchronize 视图
上面的Update 操作是静默执行的,并没有给用户确认的机会,如果需要在更新时进行更多的控制,可以使用同步操作。
在项目名称上右键打开“Team ”快捷菜单,点击【】菜单项,将自动打开Synchronize 视图:
上图中:
表示服务器上新增的文件。可进行更新操作。
表示服务器上修改过的文件。可进行更新操作。
表示本机上新增的文件。可进行提交操作。
表示本机上修改的文件。可进行提交操作。
右键点击文件,可打开快捷菜单:
通过快捷菜单,可以对相关文件进行Update 和Commit 操作。
3.6.2 比较(Compare )
双击文件名,或者点击快捷菜单的“”,可打开比较窗口,详细查看本机和服务器上的文件内容差异。
通过比较窗口右上方的工具栏,可以方便地把服务器上的修改内容合并到本机文件中。
3.6.3 冲突(Conflict )
在协同开发的环境下,当两个开发人员对同一个文件的同一行代码进行修改,并且依次提交CVS 服务器的时
候,就发生了冲突。因为CVS 不能在同一个目录里保存两个相同名字的文件,而对同一个文件,它的一行代码只会是一种结果,而不是两种。
在同步视图中,可看到文件冲突如下。
这种冲突需要开发者手工消除,并提交到CVS 服务器中形成解决冲突之后的新版本。
首先,需要进行文件比较,把服务器上的修改内容合并到本机文件中。
然后,右键点击文件,打开快捷菜单:
点击“Mark as Merged”菜单项,把该文件标记为已解决冲突的修改状态:
再进行Commit 即可。
如果要放弃本机的修改内容,也可以点击“Override and Update ”菜单项,用服务器上的文件覆盖本机的文件内容。
3.7 分支(Branch )
3.7.1 切换分支(Switch )
默认情况下,我们在主线上工作,如图。
但实际上,我们大多需要在分支中进行开发。因此,需要将本地工作拷贝从主线切换到分支中。
注意,在切换之前,请确保本地工作拷贝不存在已修改尚未提交的文件。
在项目名称上右键打开“Team ”快捷菜单,点击【】菜单项,弹出窗口如下:
选择“”选项,并且点击【Refresh Tags】按钮:
展开“Branches ”目录,选中要切换的分支名称,点击【Finish 】按钮。
切换完成时包浏览器的显示如下,说明工作拷贝已经切换到分支上了:
在分支上,我们可以像在主线上一样进行更新、提交等操作,并且不影响主线上的文件。
可以按照同样的方法,切换到某个Version 上。
3.7.2 创建分支
一个分支是基于某个基线版本(Version )创建的。
在创建分支之前,请确保本地工作拷贝已切换到要创建分支的Version 上。
首先,按照切换分支的方法,把本地工作拷贝切换到要创建分支的Version 上。
在项目名称上右键打开“Team ”快捷菜单,点击【】菜单项,弹出窗口如下:
输入分支名称,例如V20120727_B1,点击【OK 】按钮,即可完成分支的创建。 因为分支在创建后无法删除或改名,所以请慎重进行创建操作。
3.7.3 合并主线
将主线的最新内容合并到分支中。
在合并之前,请确保本地工作拷贝已切换到要分支上,并且分支已经同步过。
合并是通过比较进行的。
在项目名称上右键打开“口如下: ”快捷菜单,点击【】菜单项,弹出窗
选择“HEAD ”标记,点击【OK 】按钮,将自动打开Synchronize 视图。
在文件比较后,通过右键快捷菜单“Replace ”,可将主线上的内容更新到分支中。
3.7.4 合并分支
将分支的最新内容合并到主线中。
在合并之前,请确保本地工作拷贝已切换到要主线上,并且主线已经同步过。
合并也是通过比较进行的。
在项目名称上右键打开“口如下:
”快捷菜单,点击【】菜单项,弹出窗
选择要合并的分支标记,点击【OK 】按钮,将自动打开Synchronize 视图。
在文件比较后,通过右键快捷菜单“Replace ”,可将分支上的内容更新到主线中。
3.8 版本(Version )
3.8.1 切换版本(Switch )
可以按照切换分支的方法,把本地工作拷贝切换到要某个Version 上。
要注意,切换后的本地工作拷贝是只读的,不允许进行Commit 操作。
3.8.2 创建版本
一个版本是在主线基础上创建的。
在创建版本之前,请确保本地工作拷贝已切换到要主线上,并且主线已经同步过。
在项目名称上右键打开“Team ”快捷菜单,点击【】菜单项,弹出窗口如下:
点击【Details 】按钮可以看到已经存在的所有版本标记。
输入要创建的版本标记名称,点击【OK 】按钮,即可完成版本标记的创建。
因为版本在创建后无法删除或改名,所以请慎重进行创建操作。
3.9 历史(History )
查看一个文件的修改历史。
在文件名称上右键打开“Team ”快捷菜单,点击【】菜单项,显示History 窗口如下:
Revision (修订):
文件的修订版本。
当增加一个文件到CVS 的时候,它会有一个初始Revision 是1.1,以后每次提交,就会增加到1.2,
1.3„„
Tag (标记):
Tag 用来进行标识必要的信息,包括Version 和Branch 标记。
Author (作者):
文件修订的作者,即提交人的用户名。
Comment (注释):
用来记录每次操作的内容和目的的信息。
在提交和导入等操作的时候,操作者必须提供一些注释信息。这些注释对于跟踪软件的变化过程十分
重要。
窗口右上角有一个工具栏:
这个工具栏可以控制History 窗口的显示方式。
在某一行记录上,点击右键,将弹出如下的快捷菜单: 表示Version , 表示Branch 。
通过这个快捷菜单,可以进行该文件的各个修订版本的查看、两个版本的文件比较、移动版本标记、显示注解视图等操作。
3.10 其他
CVS 还具有其他一些有用的功能,例如文件恢复、日期标记等,请自行参考相关资料。