http://fedora.gro.clinux.org/docs/documentation-guide-zh_CN/sn-cvs-cvscommands.html10.4. 基本的 CVS 命令
配置好系統的 CVS 訪問之後,檢出要處理的模組。
|
技巧 |
關於是否需要設定 $CVSROOT 環境變數,或命令列選項 -m repository,應當看當前工作目錄是否有一個 CVS/ 子目錄。 如果有 CVS/ 子目錄,CVS 忽略任何 $CVSROOT 或 -m 命令列選項設定。 |
10.4.1. 檢出模組
您只需檢出模組一次。當一個模組檢出到本地之後,它就一直在那兒了。
要檢出一個模組,執行下面的命令:
$ cvs co <module-name>
例如,要檢出 example-tutorial 模組,先進入工作目錄,然後執行下面的命令:
$ cvs co example-tutorial
目前的目錄下將建立一個名字是 example-tutorial/ 的子目錄。
如果檢出模組時沒有指定分支名稱,預設就是 CVS 中模組的 HEAD 分支。
10.4.1.1. 檢出模組的分支
可以將 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-dateWorking revision: 1.47Repository revision: 1.47 /cvs/docs/custom-guide/rhl-cg-en.sgml,vSticky Tag: (none)Sticky Date: (none)Sticky Options: (none)Existing Tags:BRANCH-VERSION-1.2 (branch: 1.25.2)
只有在 Existing Tags(現有標記)中顯示為"分支"的標記才可以作為分支檢出。
10.4.2. 更新檔案
要擷取模組中檔案的最新版本,切換到包含模組檔案的目錄,執行命令:
$ cvs update
模組所有檔案的最新版本將下載到本地。如果您看到了檔案衝突提示,請參考 第 10.4.8 節 “解決衝突”。
10.4.3. 提交檔案
在本地修改模組的檔案之後,將它們提交,以在 CVS 伺服器上儲存更改:
$ cvs commit -m "some log message" filename
|
注意 |
如果您想用喜歡的文字編輯器來撰寫日誌資訊,並且已經定義了 $VISUAL 或 $EDITOR 環境變數,就可以忽略 -m "some log message"。編輯緩衝區中會包含一些描述修改的注釋,您在添加自己的文字時,不必刪掉它們。 |
日誌資訊應當儘可能有描述性,這樣您和共同作者都可以瞭解做過了哪些修改。如果日誌訊息是 updated some files(更新了一些檔案),那它無法描述修改了什麼,將來對您毫無用處。如果您修正了一個錯誤,應當包含 Bugzilla 引用。
<filename> 可以是一個檔案名稱,一系列以空格分隔的檔案名稱,或者一組以萬用字元指定的檔案名稱,類似 *.png 或 foo-*.sgml。
如果在 commit 命令中沒有給出檔案名稱或萬用字元,所有修改都會被提交到伺服器。這個命令是遞迴的,模組中任何子目錄的修改也都會被提交。不帶檔案名稱執行 commit 命令時要小心,因為您可能不記得改過了什麼。
如果您看到了檔案衝突,請參考 第 10.4.8 節 “解決衝突”。
10.4.4. 添加檔案
要向模組添加檔案,在本地目錄中建立這個檔案,然後執行下面的命令:
$ cvs add file-to-add
添加檔案之後,必須 commit(提交)添加的檔案到伺服器:
$ cvs commit -m "some log message" file-to-add
10.4.5. 管理二進位檔案
通常存檔的檔案是簡單的文字檔,但是有時也會存檔二進位檔案。CVS 程式可以識別大多數副檔名,類似 .png 或 .jpg,這樣就不會做壞事。
當檔案被檢出時,cvs 掃描它,尋找特殊的關鍵字,類似 "$id:$",然後替換為相應的值, 例如版本號碼。
關鍵字替換通常會損壞二進位檔案,因此如果 CVS 無法正確識別檔案為二進位檔案,必須關閉替換。標識檔案為二進位就關閉了關鍵字替換,輸入命令:
$ cvs admin -kk filename
注意在使用 admin 命令前,檔案必須已被檢入 CVS 倉庫。這樣不會出錯,因為關鍵字擴充是在檔案被檢出並複製到本地目錄時進行的,而不是提交到倉庫中的時候。
|
恢複二進位檔案 |
如果您將二進位檔案檢入倉庫,發現它在檢出時被損壞了,不要心急。只要運行上面的 admin 命令,再刪掉本地檔案,然後再次檢出就可以了。 |
10.4.6. 刪除檔案
如果模組不再需要某個檔案,使用 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 發送一封郵件,寫明要重新命名的檔案。
10.4.7. 檔案的狀態
有時需要查看模組中檔案的 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 命令的檔案。
10.4.8. 解決衝突
如果您修改了一個檔案,而另一個人修改了同樣的地區並且先提交了,您在提交檔案或更新本地目錄時就會看到類似下面的訊息:
RCS file: /cvs/docs/module-name/filename.sgml,vretrieving revision 1.12retrieving revision 1.13Merging differences between 1.12 and 1.13 into filename.sgmlrcsmerge: warning: conflicts during mergecvs server: conflicts found in filename.sgmlC filename.sgml
要解決衝突,開啟檔案,搜尋 <<<<<<< 然後判斷哪個版本才是正確的。例如:
<para>Some sentence.<<<<<<< filename.sgmlA sentence that was changed in the working copy.=======A same sentence that was changed differently and committed.>>>>>>> 1.13</para>
<<<<<<< 和 ======= 之間的內容是工作目錄裡原有的。 ======= 和 >>>>>>> 之間是伺服器上的內容。
修改檔案,解決衝突,然後提交它。
10.4.9. 小結
所有命令都假定您的目前的目錄是正確的。
| 命令 |
描述 |
cvs checkout <module-name> 或 cvs co <module-name> |
建立一個名為 <module-name> 的目錄, 將模組內容放在目錄中 |
cvs co -d <directory> -r <branchname><module-name> |
建立 <directory> 目錄,將 <module-name> 模組的 <branchname> 分支放在目錄中。 |
cvs update 或 cvs up |
從伺服器將檔案更新到最新版 |
cvs add <filename> |
將檔案 "filename" 添加到 CVS 伺服器 |
cvs commit -m "My message" <filename> |
將本機電腦上的檔案 <filename> 提交為最新版 |
cvs log <filename> |
查看檔案 <filename> 的提交資訊 |
cvs status <filename> |
查看檔案的狀態,類似 Locally Modified |
cvs status -v <filename> |
查看檔案現有的標籤和分支 |
cvs diff <filename> |
查看檔案的工作版本與分支中的最新版本的不同之處 |
cvs diff -r1.1 -r1.2 <filename> |
查看檔案 1.1 和 1.2 版本的不同之處 |
表 10.1. 基本的 CVS 命令
請閱讀系統中的 CVS 手冊來擷取更多資訊,位置是 /usr/share/doc/cvs-<version-number>/cvs.ps (CVS 版本可能有所不同)。還可以訪問 CVS 首頁,位置是 http://www.cvshome.org/。