基本的 CVS 命令

 http://fedora.gro.clinux.org/docs/documentation-guide-zh_CN/sn-cvs-cvscommands.html

10.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-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 (現有標記)中顯示爲"分支"的標記纔可以作爲分支檢出。

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> 可以是一個文件名,一系列以空格分隔的文件名,或者一組以通配符指定的文件名,類似 *.pngfoo-*.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 服務器上重命名它,這樣文件的歷史可以保留下來。如果需要重命名文件,就向 [email protected] 發送一封郵件,寫明要重命名的文件。

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,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>

<<<<<<< ======= 之間的內容是工作目錄裏原有的。 =======>>>>>>> 之間是服務器上的內容。

修改文件,解決衝突,然後提交它。

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 updatecvs 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/

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