CVS使用
下面我们讲一下CVS的使用和管理。
在使用CVS之前,必须要指定CVS的根路径,不像RCS是工作在工作目录下的RCS目录下。指定CVS路径的方法有两种,一种是使用cvs-d 选项指定,如:
cvs -d /home/kerberos/cvsroot 指定/home/kerberos/cvsroot为CVS仓库的路径。
另外一种是使用CVSROOT环境变量指定(bash下):
export CVSROOT=/home/kerberos/cvsroot
无论何种方式,每当重新开启一次终端会话,CVS仓库的路径都要重新设置,你可以把以上的后者加入到其实目录下的.bashrc文件中,这样开启一次终端会话后,不需要重新设置了(对于其他的环境变量的设置也是如此)。如果你的CVSROOT环境变量已经存在,可以使用cvs -d 选项来指定不同于CVSROOT所指定的CVS仓库。然后初始化CVS仓库,建立CVS维护所需要的一些文件和信息,CVS把这些信息存放在CVS仓库主目录的CVSROOT目录下。这些文件,除了modules ,其他文件都没有手动修改的必要,modules 文件定义了CVS的导出模块在CVS仓库中的位置,这一点在从CVS仓库中导出一个深层目录时是非常方便的。
cvs init
初始化之后,我们使用cvs import来把需要进行版本维护的开发项目的目录结构导入到CVS仓库中,如下:
建立好项目的目录结构以后,当前的testprj目录的结构是这样的:
[kerberos@power zhyf]$ tree testprj
testprj
|-- admin
|-- doc
|-- include
|-- libs
`-- src
|-- include
`-- main
7 directories, 0 files
cvs import有三个参数:第一个是这个目录树在CVS仓库中的模块名称,第二个是发布者的一个标志,第三个是这个项目的版本标记(tag)。下面,我们把testprj导入到CVS仓库中,使用testprj 模块名称。
[kerberos@power testprj]$cvs import testprj KERBEROS INITVER
执行命令以后,CVS会调用CVSEDITOR指定的编辑器来让你输入日志,如果CVSEDITOR没有定义,缺省调用vi,可以使用export命令指定你自己喜欢使用的编辑器。输入日志以后,CVS把当前的目录结构导入CVS仓库中,并且使用testprj这个模块名称,在导出文件时,可以使用
cvs co testprj 来导出。
"/tmp/cvscVxZnW" 5L, 242C written
cvs import: Importing /home/zhyf/cvsroot/testprj/admin
cvs import: Importing /home/zhyf/cvsroot/testprj/libs
cvs import: Importing /home/zhyf/cvsroot/testprj/src
cvs import: Importing /home/zhyf/cvsroot/testprj/src/include
cvs import: Importing /home/zhyf/cvsroot/testprj/src/main
cvs import: Importing /home/zhyf/cvsroot/testprj/doc
cvs import: Importing /home/zhyf/cvsroot/testprj/include
No conflicts created by this import
看一下cvsroot目录中的结构是不是和testprj 的相同:
../cvsroot
|-- CVSROOT
| |-- checkoutlist
| |-- checkoutlist,v
| ........................... CVS的仓库信息,省略..
| ...........................
`-- testprj
|-- admin
|-- doc
|-- include
|-- libs
`-- src
|-- include
`-- main
这里testprj 模块的结构和我们自己的testprj的目录结构是一样的。
这样,当需要再次使用这些源代码时,可以简单的使用cvs co模块名来导出目录树和文件了。导出任意具有写权限的目录下:
[kerberos@power testprj]$ cd ..
[kerberos@power zhyf]$ rm -rf testprj 删除testprj目录
[kerberos@power zhyf]$ cvs co testprj 重新导出
cvs checkout: Updating testprj
cvs checkout: Updating testprj/admin
cvs checkout: Updating testprj/doc
cvs checkout: Updating testprj/include
cvs checkout: Updating testprj/libs
cvs checkout: Updating testprj/src
cvs checkout: Updating testprj/src/include
cvs checkout: Updating testprj/src/main
[kerberos@power zhyf]$ tree testprj
testprj
|-- CVS
| |-- Entries
| |-- Repository
| `-- Root
|-- admin
| `-- CVS
| |-- Entries
| |-- Repository
| `-- Root
|-- doc
| `-- CVS
| |-- Entries
| |-- Repository
| `-- Root
|-- include
| `-- CVS
| |-- Entries
| |-- Repository
| `-- Root
|-- libs
| `-- CVS
| |-- Entries
| |-- Repository
| `-- Root
`-- src
|-- CVS
| |-- Entries
| |-- Repository
| `-- Root
|-- include
| `-- CVS
| |-- Entries
| |-- Repository
| `-- Root
`-- main
`-- CVS
|-- Entries
|-- Repository
`-- Root