- 語法: 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,瞭解完整說明):
-l
- 只在當前目錄運行。
-R
- 遞歸方式提交。此爲默認。
-r
revision- 提交到 revision。revision 必須是分支,或者是主幹上高於任何已有版本號的修訂版 (參閱 Assigning revisions)。你不能提交到分支上的一個特定修訂版。
commit
還支持這些選項:
-c
- 拒絕提交文件,除非用戶已經通過
cvs edit
註冊了一個有效的編輯。將 `commit -c' 和 `edit -c' 放在所有的 .cvsrc 文件裏面最有用。通過cvs edit
註冊可追溯的編輯(不會丟失文件的變更)或使用-f
選項,可以強行提交。要支持commit -c
要求客戶端和服務器的版本爲 1.12.10 或更高。 -F
file- 從 file 裏面讀取日誌消息,而不是打開編輯器輸入。
-f
- 注意,這不是在 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'。
-m
message- 用 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