CVS 常用操作 Howto
作者:廖宇雷
最后更新日期:2003/06
内容列表
- 导入项目到服务器
- 从服务器更新文档
- 将修改提交到服务器
- 添加新文件和目录到服务器
- 从项目中删除文件
- 从项目中删除目录
- 文件移动或者改名
- 目录移动或者改名
- 删除项目
- 列出服务器上的所有项目
- 导出不包含 CVS 信息的项目目录
- 为 cvs 操作指定描述信息
- 比较本地文件与 cvs 服务器上的文件
- 解决修改冲突
- 加快同服务器的文件传输速度
- 处理二进制文件
导入项目到服务器 | ||
格式: | cvs import [-m "描述"] 项目名 厂商名 标记 | |
-m "描述" | 为导入操作指定描述信息。实际上 -m 参数是一个公共参数,可以为所有需要描述信息的命令指定描述信息。如果不加这个参数,cvs 会自动启动记事本程序,要求你输入描述信息。参考:如何为 cvs 操作指定描述信息 | |
项目名 | cvs 服务器会根据这个名字在 cvs 服务器上创建一个目录来保存所有导入的文件。因此你使用 mydoc/project 这样项目名,将会创建两个目录:mydoc 及其子目录 project。 | |
厂商名 | 项目厂商的标记。例如 nes 或者 microsoft。 | |
标记 | 为导入的项目指定一个初始标记。一般使用 init 或者 start,表示项目开始。 | |
说明: | 将当前目录下的所有文件(包括子目录)导入到 cvs 服务器上指定的目录中(目录名与项目名相同)。每个项目的第一个操作就是导入 cvs 服务器,以后就不需要对同一个项目再次进行这个操作了。 | |
操作示例: | chdir myproject | |
输出信息: | N myproject/hello.c 导入了 hello.c 文件,项目名字是 myproject No conflicts created by this import 导入操作没有发生冲突 |
从服务器更新文档 | ||||||||||||||||
格式: | cvs update [-P] [-d] 缩写: cvs up | |||||||||||||||
-P | 删除空目录 | |||||||||||||||
-d | 更新子目录下的所有文件。如果别人向项目中添加了新目录,必须加 -d 参数才能够将这些新目录及其中的文件更新到本地。 | |||||||||||||||
操作示例: | cvs update -d | |||||||||||||||
说明: | 从 cvs 服务器上更新文件到本地,功能与 VSS 的 CheckOut 命令相同。 | |||||||||||||||
输出信息: | cvs server: Updating .
|
将修改提交到服务器 | ||
格式: | cvs commit [-m "描述"] 缩写:cvs ci | |
-m "描述" | 为修改的操作指定描述信息。 | |
操作示例: | cvs commit -m "增加了一个 test 函数" | |
说明: | 将本地修改过的文件提交到 cvs 服务器,与 VSS 的 CheckIn 操作功能相同。除了提交修改过的文件外,cvs add(添加文件)、cvs remove(删除文件)这些操作都需要 cvs commit 命令来确认。 | |
输出信息: | cvs commit: Examining . Checking in shutdown.c; /cvsroot/shutdown/shutdown.c,v <-- shutdown.c (提交文件) new revision: 1.3; previous revision: 1.2 (新的修订号 1.3,早先的修订号 1.2。这个修订号是 cvs 服务器上的文件修订记录,和项目的版本号没有关系) done 如果出现问题,那么输出信息可能是这样: cvs server: Up-to-date check failed for `hello.c' cvs [server aborted]: correct above errors first! 上面两行信息的意思是 "hello.c" 文件更新检查失败,要求首先纠正上面的错误。 通常出现这个问题最常见的原因就是你修改过的文件别人也修改过了,并提交到了 cvs 服务器上。参考:如何比较本地文件与 cvs 服务器上的文件 要纠正这个问题只有先用 cvs update 命令从服务器上更新修改过的文件到本地。如果存在冲突,还要解决冲突以后再运行 cvs commit 命令。参考:如何解决修改冲突 |
添加新文件和目录到服务器 | ||
格式: | cvs add [-m "描述"] 文件名 | |
-m "描述" | 为修改的操作指定描述信息。 | |
文件名 | 如果要添加目录,就指定为目录名。cvs add 命令支持通配符,因此可以使用通配符来添加一次性添加多个文件。 | |
操作示例: | cvs add -m "增加 test.c 文件" test.c | |
说明: | 向 cvs 服务器添加新文件或者目录。添加操作完成后用 cvs commit 命令确认添加。 | |
输出信息: | cvs server: scheduling file `test.c' for addition (计划了文件添加操作) cvs server: use 'cvs commit' to add this file permanently (使用 cvs commit 真正的执行提交操作) 如果要添加一个目录,按照下面的步骤操作: cvs add mydir ? mydir/ProjectDoc.cpp (?号表示这个文件还没有用 cvs add 命令添加到 cvs 服务器) Directory /cvsroot/myproject/mydir added to the repository (目录 mydir 已经添加到了项目中) chdir mydir cvs add ProjectDoc.cpp cvs server: scheduling file `ProjectDoc.cpp' for addition cvs server: use 'cvs commit' to add this file permanently cvs commit cvs commit: Examining . Log message unchanged or not specified RCS file: /cvsroot/myproject/mydir/ProjectDoc.cpp,v done Checking in ProjectDoc.cpp; /cvsroot/myproject/mydir/ProjectDoc.cpp,v <-- ProjectDoc.cpp initial revision: 1.1 done 如果有多个文件要添加,可以使用通配符。全部的添加操作完成后,才用 cvs commit 提交添加,这样效率更高。 |
从项目中删除文件 | ||
格式: | cvs remove [文件名] | |
文件名 | 要删除的文件名。如果这个参数省略,那么 cvs 会自动查找本地不存在的文件,并将其从 cvs 服务器中删除。 | |
操作示例: | cvs remove test.c | |
说明: | 从 cvs 服务器删除指定的文件。要删除的文件首先要从本地目录中删除或者改名。 | |
输出信息: | cvs server: file `test.c' still in working directory |
从项目中删除目录 | ||
说明: | cvs 不提供删除目录的操作,所以删除目录的唯一方法就是从 cvs 服务器删除该目录下的所有文件。 | |
操作示例: | chdir mydir |
文件移动或者改名 | ||
操作示例: | rename test.c new.c | |
说明: | 更改一个文件的名字,必须首先改变本地文件的名字。然后删除服务器上的旧文件,添加本地的新文件,最后提交操作。 |
目录移动或者改名 | ||
操作示例: | mkdir newdir | |
说明: | 更改一个目录的名字是一件非常麻烦的事情。首先你要创建新目录,然后把文件移动到这个新目录中。接下来用 cvs remove 命令删除旧目录中的文件,再用 cvs add 命令添加新目录中的文件。最后用 cvs commit 提交更改。 |
删除项目 | ||
操作示例: | plink user@host "rm -i -r /cvsroot/myproject" | |
说明: | 上面的命令实际上是登录到服务器上,用 rm 命令删除了 /cvsroot/myproject 目录。 http://www.chiark.greenend.org.uk/~sgtatham/putty/ |
列出服务器上的所有项目 | ||
操作示例: | plink user@host "ls -lF /cvsroot/ | grep -v "CVSROOT"" | |
说明: | 上面的命令可以列出服务器上的所有项目。或者使用下面的脚本: @echo off | |
输出信息: | total 46(total 46不是指项目总数) drwxrwxrwx 4 cvs_daut cvs 512 May 6 16:48 atl-freebsd_diary/ drwxrwxrwx 3 cvs_daut cvs 512 May 5 13:43 atl-msgplus2/ drwxrwxrwx 3 cvs_daut cvs 512 May 5 13:43 atl-nav2003/ drwxrwxrwx 4 cvs_daut cvs 512 May 5 13:43 atl-os/ drwxrwxrwx 9 cvs_daut cvs 512 May 9 04:52 case-ae/ drwxrwxrwx 2 cvs_daut cvs 512 May 7 11:39 case-hlg/ drwxrwxrwx 4 cvs_daut cvs 512 May 8 02:55 case-sdae/ drwxrwxrwx 5 cvs_daut cvs 512 May 5 13:44 case-wdae/ drwxrwxrwx 2 cvs_daut cvs 512 May 5 13:44 docs-MeetingRecord/ drwxrwxrwx 6 cvs_daut cvs 512 May 7 22:10 docs-devl_common/ drwxrwxrwx 3 cvs_daut cvs 512 May 9 09:25 docs-freebsd_diary/ .... |
导出不包含 CVS 信息的项目目录 | ||
格式: | cvs export -D 日期 -d 目的地目录 项目名 | |
-D 日期 | 导出哪个日期以后的项目文件。如果时 -D now 则导出当前最新的文件。 | |
-d 目的地 | 导出的文件存放在哪个目录中。 | |
项目名 | 要导出的项目的名字。 | |
操作示例: | cvs export -D now -d myproject_release myproject | |
说明: | 从 cvs 服务器中导出指定的项目,但不包含 CVS 信息。通常在公开发布源代码之前用 cvs export 命令导出文件。因为 CVS 信息中有用户名、服务器地址等信息,不应该让源代码的最终用户看到这些信息。 | |
输出信息: | cvs export: Updating myproject_release |
为 cvs 操作指定描述信息 | ||
操作示例: | cvs add -m "Add file test.c" test.c | |
说明: | 大部分 cvs 命令都接受 -m 参数,以指定一个操作的描述信息。如果不使用 -m 参数,那么 cvs 会启动记事本程序来要求用户输入描述信息。 与使用 -m 参数比较而言,在记事本中可以输入多行的描述信息,详细的说明操作情况。记事本窗口中,用 CVS: 起始的行都会被忽略掉。 |
比较本地文件与 cvs 服务器上的文件 | ||
格式: | cvs diff [文件名] | |
文件名 | 要比较的文件名。如果这个参数省略,那么 cvs 会比较当前目录下的所有文件。 | |
操作示例: | cvs diff test.c | |
说明: | 比较本地文件和保存在 cvs 仓库中的版本的不同之处。 | |
输出信息: | Index: test.c |