commit—將文件提交到倉庫

  • 語法: 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。使用 logstatus 命令可以查詢 commitid; 見 log, File status

 

commit 選項

commit 支持標準選項(參閱 Common options,瞭解完整說明):

-l
只在當前目錄運行。
-R
遞歸方式提交。此爲默認。
-r revision
提交到 revisionrevision 必須是分支,或者是主幹上高於任何已有版本號的修訂版 (參閱 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' 選項提交到分支修訂版(小數點是偶數)。要創建分支修訂版,需要用 rtagtag 命令裏面的 `-b' 選項(參閱 Branching and merging)。之後,checkoutupdate 就基於新創建的分支。從這一刻起,這些工作源碼的修改 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章