27.2. 選取程式時所要考慮的決定性因素

在決定要使用哪個程式時,必須考慮一些重要的因素。

27.2.1. 用戶端對伺服器與點對點

配送資料時常使用的模式有兩種。第一個模式是,所有的用戶端都以中央伺服器為準,將其檔案同步化。伺服器至少必須偶爾可以讓所有的用戶端存取。Subversion、CVS 以及 WebDAV 都採用這種模式。

另一種可能性就是,讓網路上所有主機都以點對點的方式將彼此間的資料同步化。這是 unison 所遵循的概念,rsync 實際上使用的是用戶端模式,但是任何用戶端都可以當成伺服器使用。

27.2.2. 可攜式

在許多其他的作業系統上 (包含各種 Unix 與 Windows 系統) 都可以使用 Subversion、CVS 以及 unison。

27.2.3. 互動式與自動化

在 Subversion、CVS、WebDAV 以及 Unison 中,資料同步化是由使用者以手動方式啟動。這讓使用者對於要同步化的資料進行良好的控制,並可輕鬆地處理衝突。然而,如果同步化間隔太長,就比較可能發生衝突。

27.2.4. 衝突:事件與解決方案

即使多人分工合作同時處理一個大型程式專案,Subversion 或 CVS 發生衝突的機率還是相當小。這是因為文件是在個別的行列上進行合併。當發生衝突時,只有一個用戶端會受到影響。Subversion 或 CVS 中的衝突通常都可以輕易解決。

Unison 會報告衝突,並允許將受影響的檔案排除在同步化之外。然而,變更的合併不像在 Subversion 或 CVS 中那樣容易。

兩相比較下,Subversion 或 CVS 在發生衝突時可以部份接受變更,但 WebDAV 只會在成功地進行完整修改時執行登記。

rsync 中則無衝突處理功能。使用者必須小心不要覆寫檔案,並手動解決所有可能的衝突。基於安全著想,可以另外使用 RCS 這一類的版本設定系統。

27.2.5. 選取和新增檔案

在其標準組態中,Unison 會同步化整個目錄樹狀結構。出現在樹狀結構中的新檔案會自動包括在同步化中。

在 Subversion 或 CVS 中,必須分別使用 svn addcvs add 指令,以明確地新增目錄與檔案。這讓使用者對於要同步化的檔案擁有更大的控制權。另一方面,新檔案時常會被忽略,特別是在處理大量的檔案而忽略了 svn update 以及 svn statuscvs update 輸出中的問號時。

27.2.6. 歷程記錄

Subversion 或 CVS 還有另一項功能,就是可以重新建構舊的檔案版本。每個變更都可以插入簡短的編輯符號,而且之後可以根據其內容與符號輕易地追蹤檔案的發展。這對論文與程式文字而言,是一種很珍貴的助力。

27.2.7. 資料量與硬碟需求

所有相關主機的硬碟都需要有足夠的可用空間,來儲存所有分散式的資料。Subversion 與 CVS 在伺服器上還需要額外的空間,供儲存區資料庫使用。檔案歷程記錄也會儲存在伺服器上,因此需要更多的空間。當文字格式的檔案變更時,只需儲存修改過的那幾行。每當變更檔案時,二進位檔案就會需要與該檔案大小相同的額外空間。

27.2.8. GUI

Unison 提供圖形使用者介面,可顯示 Unison 所要執行的同步化程序。 接受提議或排除同步化中的個別檔案。在文字模式中,以互動式的方式確認個別程序。

有經驗的使用者通常會從指令行執行 Subversion 或 CVS。然而,在 Linux 系統中也有 cervisia 之類的圖形使用者介面,其他作業系統中也有 wincvs 之類的圖形使用者介面。許多開發工具 (像是 kdevelop) 以及文字編輯器 (像是 emacs) 都支援 CVS 或 Subversion。使用這些前端程式的話,衝突的解決方案通常會更容易執行。

27.2.9. 使用者親切性

Unison 與 rsync 使用簡便,而且也適於新手使用。CVS 與 Subversion 則比較難操作。使用者必須瞭解儲存區與本機資料之間的互動。對資料的變更應該先在本機上與儲存區合併。這是使用 cvs updatesvn update 指令來執行。接著必須使用 cvs commitsvn commit 指令將資料傳送回儲存區。只要瞭解此程序,即使是新手也能輕鬆使用 CVS 或 Subversion。

27.2.10. 防止攻擊的安全性

在傳輸期間,應該保護資料以防攔截和竄改。Unison、CVS、rsync 以及 Subversion 都可以透過 ssh (安全的外圍程式) 來使用,提供安全性以防護此類攻擊。應該避免透過 rsh (遠端外圍程式) 執行 CVS 或 Unison。同樣地不建議在不安全的網路中使用 pserver 機制存取 CVS。Subversion 與 Apache 一起執行,便提供了必要的安全性措施。

27.2.11. 針對資料遺失的防護

開發人員使用 CVS 來管理程式專案已經有很長的一段時間,而且極為穩定。因為開發的歷程記錄皆已儲存,所以 CVS 甚至提供保護,防止某些使用者錯誤發生,例如不小心刪除檔案。儘管 Subversion 不像 CVS 一樣普及,它已運用於像是 Subversion 專案本身的生產環境中。

Unison 仍算是相當新的產品,但是宣稱擁有高水準的穩定性。然而,它對於使用者錯誤更為敏感。一旦確認要將檔案刪除同步化,就不能再還原檔案。

表格 27.1. 檔案同步化工具的功能:-- = 非常差、- = 差或無法使用、o = 中等、+ = 好、++ = 佳、x = 可用

unison

CVS/SVN

rsync

mailsync

用戶端/伺服器

相等

C-S/C-S

C-S

相等

可攜式

Lin、Un*x、Win

Lin、Un*x、Win

Lin、Un*x、Win

Lin、Un*x

互動

x

x/x

x

-

速度

-

o/+

+

+

衝突

o

++/++

o

+

檔案 Sel。

目錄

選項/檔案、目錄

目錄

信箱

歷程記錄

-

x/x

-

-

硬碟空間

o

--

o

+

GUI

+

o/o

-

-

困難度

+

o/o

+

o

攻擊

+(ssh)

+/+(ssh)

+(ssh)

+(SSL)

資料損失

+

++/++

+

+