- 语法: commit [-lnRf] [-m 'log_message' | -F file] [-r revision] [files...]
- 需要: 工作目录,仓库。
- 修改: 仓库。
- 同义词: ci
当你需要将工作目录里面的修改合并到源码仓库时,使用 commit
命令。
如果你不指定具体的文件,当前工作目录里面的文件,经过检验,都会被提交。 commit
会谨慎地在仓库中修改那些真正做了变更的文件。默认情况下(或你特别指定了 `-R' 选项),在子目录中的也要检查,如果它们有变更也会被提交; 你可以使用 `-l' 选项让 commit
只针对当前的目录。
commit
会校验选择的文件已经更新到源码仓库的当前修订版; 如果有文件需要首先使用 update
(参阅 update) 更新到当前版本,它会通知你,然后不做提交退出。commit
不会为你调用 update
命令,而是让你自行处置。
如果就绪,会打开一个编辑器用来输入日志消息,用来写到一个或多个日志程序 (参阅 modules 和 参阅 loginfo) 并将其放到仓库的 rcs 文件。日志消息可以通过 log
命令看到; 见 log。你也可以在命令行上用 `-m message' 选项指定日志消息,以避免打开编辑器,或者用 `-F file' 来指定包含日志消息的文件。
commit
时,在仓库的 rcs 文件里面会放入唯一的 commitid。同时提交的文件是相同的 commitid。使用 log
和 status
命令可以查询 commitid; 见 log, File status。
commit 选项
commit
支持标准选项(参阅 Common options,了解完整说明):
-
只在当前目录运行。
-
递归方式提交。此为默认。
- 提交到 revision。 revision 必须是分支,或者是主干上高于任何已有版本号的修订版 (参阅 Assigning revisions)。你不能提交到分支上的一个特定修订版。
-l
-R
-r
revision
commit
还支持这些选项:
-
拒绝提交文件,除非用户已经通过
cvs edit
注册了一个有效的编辑。将 ` commit -c' 和 ` edit -c' 放在所有的 .cvsrc 文件里面最有用。通过cvs edit
注册可追溯的编辑(不会丢失文件的变更)或使用-f
选项,可以强行提交。要支持commit -c
要求客户端和服务器的版本为 1.12.10 或更高。
-
从
file 里面读取日志消息,而不是打开编辑器输入。
-
注意,这不是在
Common options 里面定义的 `
-f' 选项的标准行为。
即使没有修改文件也要强制 cvs 提交到一个新修订版。对于 cvs 1.12.10 版本,它使
-c
选项被忽略。假如当前的 file 修订版是 1.7,那么下面的命令是相等的:$ cvs commit -f file $ cvs commit -r 1.8 file
`-f' 选项禁止了递归(如同使用 `-l')。要让 cvs 提交所有子目录里面的所有文件,必须用 `-f -R'。
- 用 message 作为日志消息,而不是打开编辑器输入。
-c
-F
file
-f
-m
message
commit 示例
提交到分支
你可以用 `-r' 选项提交到分支修订版(小数点是偶数)。要创建分支修订版,需要用 rtag
或 tag
命令里面的 `-b' 选项(参阅 Branching and merging)。之后,checkout
或 update
就基于新创建的分支。从这一刻起,这些工作源码的修改 commit
都自动添加到分支修订版,也就是不会干扰主线上的开发。例如,你给产品的 1.2 版做了个补丁,即使已经开发到了 2.0 版,你也可以:
$ cvs rtag -b -r FCS1_2 FCS1_2_Patch product_module $ cvs checkout -r FCS1_2_Patch product_module $ cd product_module [[ hack away ]] $ cvs commit
因为 `-r' 选项是粘性的,所有工作都自动进行。
编辑完之后建立分支
当你在进行试验性软件的开发,工作是基于上周检出的修订版。如果小组里面的其他人要与你一同参与这个软件,但又不想干扰主线上的开发,你可以将修改提交到新的分支上。其他人可以检出你试验性的工作,并利用 cvs 解决冲突的特性。场景如下:
[[ hacked sources are present ]] $ cvs tag -b EXPR1 $ cvs update -r EXPR1 $ cvs commit
update
命令可以在所有的文件加上粘性的 `-r EXPR1' 选项。注意,你对文件的修改将不会因 update
命令删除。由于 `-r' 是粘性的, commit
将自动提交到正确的分支。你也许会:
[[ hacked sources are present ]] $ cvs tag -b EXPR1 $ cvs commit -r EXPR1
但这样做,只有这些修改过的文件有 `-r EXPR1' 粘性标识。如果你继续开发,提交时没有指定 `-r EXPR1' 标识,一些文件可能会提交到主干。
其他人要跟你一同进行试验性开发,只需
$ cvs checkout -r EXPR1 whatever_module