基本的 CVS 命令(转)
配置好系统的 CVS 访问之后,检出要处理的模块。
技巧 | |
---|---|
关于是否需要设置 如果有 |
您只需检出模块一次。当一个模块检出到本地之后,它就一直在那儿了。
要检出一个模块,执行下面的命令:
$
cvs co
<module-name>
例如,要检出 example-tutorial
模块,先进入工作目录,然后执行下面的命令:
$
cvs co example-tutorial
当前目录下将新建一个名字是 example-tutorial/
的子目录。
如果检出模块时没有指定分支名称,默认就是 CVS 中模块的 HEAD 分支。
可以将 CVS 分支视为一篇手册的某个版本,或是一个文件的不同版本。
要检出模块的分支,运行下面的命令:
$
cvs co
-d
<directory>
-r
<branchname>
<module-name>
将创建名为 <directory>
的目录, 模块 <module-name>
的 <branchname>
分支的文件将被复制到这个目录中。
例如,要检出 mymodule
模块的 BRANCH-VERSION-1.2 分支,运行命令:
$
cvs co -d mymodule-1.2 -r BRANCH-VERSION-1.2 mymodule
模块的 BRANCH-VERSION-1.2 分支将被检出到 mymodule-1.2
目录中。
要查看文件有哪些分支和标记,运行命令:
$
cvs status
-v
<filename>
例如,文件 foo.sgml
的状态如下:
===================================================================
File: foo.sgml Status: Up-to-date
Working revision: 1.47
Repository revision: 1.47 /cvs/docs/custom-guide/rhl-cg-en.sgml,v
Sticky Tag: (none)
Sticky Date: (none)
Sticky Options: (none)
Existing Tags:
BRANCH-VERSION-1.2 (branch: 1.25.2)
只有在 Existing Tags
(现有标记)中显示为"分支"的标记才可以作为分支检出。
在本地修改模块的文件之后,将它们提交,以在 CVS 服务器上保存更改:
$
cvs commit
-m
"some log message
"filename
注意 | |
---|---|
如果您想用喜欢的文本编辑器来撰写日志信息,并且已经定义了 $VISUAL 或 $EDITOR 环境变量,就可以忽略 |
日志信息应当尽可能有描述性,这样您和共同作者都可以了解做过了哪些修改。如果日志消息是 updated some files
(更新了一些文件),那它无法描述修改了什么,将来对您毫无用处。如果您修正了一个错误,应当包含 Bugzilla 引用。
<filename>
可以是一个文件名,一系列以空格分隔的文件名,或者一组以通配符指定的文件名,类似 *.png
或 foo-*.sgml
。
如果在 commit
命令中没有给出文件名或通配符,所有修改都会被提交到服务器。这个命令是递归的,模块中任何子目录的修改也都会被提交。不带文件名执行 commit
命令时要小心,因为您可能不记得改过了什么。
如果您看到了文件冲突,请参考 第 10.4.8 节 “解决冲突”。
要向模块添加文件,在本地目录中创建这个文件,然后执行下面的命令:
$
cvs add
file-to-add
添加文件之后,必须 commit
(提交)添加的文件到服务器:
$
cvs commit
-m
"some log message
"file-to-add
通常存档的文件是简单的文本文件,但是有时也会存档二进制文件。CVS 程序可以识别大多数文件扩展名,类似 .png
或 .jpg
,这样就不会做坏事。
当文件被检出时,cvs 扫描它,查找特殊的关键字,类似 "$id:$
",然后替换为相应的值, 例如版本号。
关键字替换通常会损坏二进制文件,因此如果 CVS 无法正确识别文件为二进制文件,必须关闭替换。标识文件为二进制就关闭了关键字替换,输入命令:
$
cvs
admin
-kk
filename
注意在使用 admin
命令前,文件必须已被检入 CVS 仓库。这样不会出错,因为关键字扩展是在文件被检出并复制到本地目录时进行的,而不是提交到仓库中的时候。
恢复二进制文件 | |
---|---|
如果您将二进制文件检入仓库,发现它在检出时被损坏了,不要心急。只要运行上面的 |
如果模块不再需要某个文件,使用 remove
命令来删除它,然后用 commit
命令将删除提交到服务器。即使模块的当前版本删除了某个文件,这个文件的副本还会被保留在服务器上,可以随时用 add
命令恢复。
$
cvs rm -f
file-to-remove
删除文件后,必须 commit
(提交)删除:
$
cvs commit
-m
"some log message
"file-to-remove
在用 commit
命令提交删除时不能使用通配符。必须明确地指定文件名。
如果需要重命名某个文件,最好在 CVS 服务器上重命名它,这样文件的历史可以保留下来。如果需要重命名文件,就向 cvsdocs-administrator@fedora.redhat.com
发送一封邮件,写明要重命名的文件。
有时需要查看模块中文件的 status(状态)。执行命令:
$
cvs status
filename
仓库文件的状态报告如下所示:
Up-to-date
-
您的文件版本正是 CVS 服务器上的最新版本。
Locally Modified
-
您已从服务器上更新了最新的版本,并且做了修改。
Locally Added
-
您使用
cvs add
命令添加了文件,但是尚未提交文件的添加。 Locally Removed
-
您使用
cvs remove
命令删除了文件,但是尚未提交文件的删除。 Needs Checkout
-
服务器上有新版本的文件,您需要更新。尽管状态中说,需要检出,实际的意思是,您需要用
cvs update
命令更新文件。 Needs Patch
-
本地文件需要打补丁以更新到服务器的最新版。执行
cvs update
命令来解决。 Needs Merge
-
服务器上有更新的版本,您的本地版本却做了未提交的修改。这种情况可能经常发生,如果您没有获取最新版本就进行修改的话。
File had conflicts on merge
-
类似
Needs Merge
,但是当您执行cvs update
命令时,将无法自动解决冲突。关于如何解决冲突请参考 第 10.4.8 节 “解决冲突”。 Unknown
-
CVS 服务器不知道文件的任何信息。它没有被本地添加或删除,也从未提交到服务器上。这种情况通常发生在不应被提交到 CVS 服务器的文件上,例如
generated-index.sgml
,或者是想添加到仓库但尚未执行cvs add
命令的文件。
如果您修改了一个文件,而另一个人修改了同样的区域并且先提交了,您在提交文件或更新本地目录时就会看到类似下面的消息:
RCS file: /cvs/docs/module-name/filename.sgml,v
retrieving revision 1.12
retrieving revision 1.13
Merging differences between 1.12 and 1.13 into filename.sgml
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in filename.sgml
C filename.sgml
要解决冲突,打开文件,搜索 <<<<<<<
然后判断哪个版本才是正确的。例如:
<para>
Some sentence.
<<<<<<< filename.sgml
A sentence that was changed in the working copy.
=======
A same sentence that was changed differently and committed.
>>>>>>> 1.13
</para>
<<<<<<<
和 =======
之间的内容是工作目录里原有的。 =======
和 >>>>>>>
之间是服务器上的内容。
修改文件,解决冲突,然后提交它。
所有命令都假定您的当前目录是正确的。
命令 | 描述 |
---|---|
cvs checkout 或 cvs co |
创建一个名为 <module-name> 的目录, 将模块内容放在目录中 |
cvs co -d |
创建 <directory> 目录,将 <module-name> 模块的 <branchname> 分支放在目录中。 |
cvs update 或 cvs up |
从服务器将文件更新到最新版 |
cvs add |
将文件 "filename" 添加到 CVS 服务器 |
cvs commit -m "My message" |
将本地计算机上的文件 <filename> 提交为最新版 |
cvs log |
查看文件 <filename> 的提交信息 |
cvs status |
查看文件的状态,类似 Locally Modified |
cvs status -v |
查看文件现有的标签和分支 |
cvs diff |
查看文件的工作版本与分支中的最新版本的不同之处 |
cvs diff -r1.1 -r1.2 |
查看文件 1.1 和 1.2 版本的不同之处 |
表 10.1. 基本的 CVS 命令
请阅读系统中的 CVS 手册来获取更多信息,位置是 /usr/share/doc/cvs-
(CVS 版本可能有所不同)。还可以访问 CVS 主页,位置是 http://www.cvshome.org/。<version-number>
/cvs.ps