27.4. CVS 簡介

如果經常編輯某些個別檔案,並且以檔案格式儲存,例如 ASCII 文字或程式來源文字,就非常適合使用 CVS 進行同步化。您可以使用 CVS 同步化其他格式的資料,例如 JPEG 檔案,但是會造成大量的資料,因為檔案的所有變體都會永久儲存在 CVS 伺服器上。在這種情形下,CVS 的大部份功能都將無法使用。只有在所有工作站都可以存取同一伺服器時,才能使用 CVS 同步化檔案。

27.4.1. 設定 CVS 伺服器

server 是所有有效檔案所在的主機,這包含所有檔案的最新版本。任何靜態工作站都可做為伺服器。可能的話,CVS 儲存區的資料應該包含在定期備份中。

當設定 CVS 伺服器時,透過 SSH 授與使用者該伺服器的存取權可能是不錯的方式。如果使用者是以 tux 的身份登入伺服器,而且 CVS 軟體既安裝在伺服器上也安裝在用戶端上,則必須在用戶端上設定下列環境變數:


CVS_RSH=ssh CVS_ROOT=tux@server:/serverdir

cvs  init 指令可用來從用戶端啟始 CVS 伺服器。這只需要做一次。

最後,必須為同步化指定名稱。在用戶端上選取或建立一個目錄,專門存放 CVS 所管理的檔案 (目錄也可以是空的) 。該目錄的名稱也就是同步化的名稱。在此範例中,該目錄稱為 synchome。變更至此目錄,然後輸入下列指令將同步化名稱設為 synchome


cvs import synchome tux wilber

許多 CVS 指令都需要註解。因此,CVS 會啟動編輯器 (如果沒有定義編輯器,則會啟動環境變數 $EDITOR 或 vi 中所定義的編輯器。)在指令行先輸入註解,就可以避免編輯器的呼叫,如下列範例所示:


cvs import -m 'this is a test' synchome tux wilber

27.4.2. 使用 CVS

現在可以使用 cvs  co synchome 從所有主機取出同步化儲存區。這會在用戶端上建立新的子目錄 synchome。若要將變更交付至伺服器,請換至 synchome 目錄 (或其中一個子目錄),然後輸入 cvs commit

根據預設,所有的檔案 (包括子目錄) 都會交付給伺服器。若只要交付個別的檔案或目錄,請在 cvs commit file1 directory1 中指定它們。在將它們交付至伺服器前,必須使用像是 cvs add file1 directory1 之類的指令,將新檔案與目錄新增至儲存區。接著,使用 cvs commit file1 directory1 交付新增的檔案與目錄。

您更換至另一個工作站時,如果先前的工作階段尚未取出該工作站的同步化儲存區,請現在取出 (參閱上方)。

使用 cvs update 啟動與伺服器的同步化。依照 cvs update file1 directory1 中的個別檔案或目錄來更新。若要查看目前檔案與伺服器上所存版本的差異,請使用 cvs diffcvs diff file1 directory1 指令。使用 cvs -nq update 來查看哪些檔案會受到更新的影響。

以下是更新期間所顯示的一些狀態符號:

U

已更新本機版本。這將會影響伺服器所提供及在本地系統上所遺失的全部檔案。

M

已修改本機版本。如果在伺服器上有一些變更,可以在本機複本中將差異合併。

P

本機版本已使用伺服器版本修補。

C

本機檔案與儲存區中目前的版本衝突。

?

這個檔案並不存在於 CVS。

M 狀態是指在本機修改過的檔案。或是將本機複本交付至伺服器,或是移除本機檔案後再執行一次更新。在此例中,會從伺服器擷取遺失的檔案。如果您交付本機已修改的檔案,而該檔案是在同一行中變更並交付,則有可能造成衝突,這是以 C 表示。

如果發生這種狀況,請查看檔案中的衝突記號 (?> 與 ?<) ,並在兩個版本之間做一選擇。這有可能是相當麻煩的工作,您可能會決定捨棄變更、刪除本機檔案,然後輸入 cvs up,以便從伺服器擷取目前的版本。

27.4.3. 如需詳細資訊

本小節僅針對 CVS 的許多可能性提供簡短的介紹。下列 URL 提供許多相關文件:

http://www.cvshome.org/
http://www.gnu.org/manual/