在決定要使用哪個程式時,必須考慮一些重要的因素。
配送資料時常使用的模式有兩種。第一個模式是,所有的用戶端都以中央伺服器為準,將其檔案同步化。伺服器至少必須偶爾可以讓所有的用戶端存取。Subversion、CVS 以及 WebDAV 都採用這種模式。
另一種可能性就是,讓網路上所有主機都以點對點的方式將彼此間的資料同步化。這是 unison 所遵循的概念,rsync 實際上使用的是用戶端模式,但是任何用戶端都可以當成伺服器使用。
在 Subversion、CVS、WebDAV 以及 Unison 中,資料同步化是由使用者以手動方式啟動。這讓使用者對於要同步化的資料進行良好的控制,並可輕鬆地處理衝突。然而,如果同步化間隔太長,就比較可能發生衝突。
即使多人分工合作同時處理一個大型程式專案,Subversion 或 CVS 發生衝突的機率還是相當小。這是因為文件是在個別的行列上進行合併。當發生衝突時,只有一個用戶端會受到影響。Subversion 或 CVS 中的衝突通常都可以輕易解決。
Unison 會報告衝突,並允許將受影響的檔案排除在同步化之外。然而,變更的合併不像在 Subversion 或 CVS 中那樣容易。
兩相比較下,Subversion 或 CVS 在發生衝突時可以部份接受變更,但 WebDAV 只會在成功地進行完整修改時執行登記。
rsync 中則無衝突處理功能。使用者必須小心不要覆寫檔案,並手動解決所有可能的衝突。基於安全著想,可以另外使用 RCS 這一類的版本設定系統。
在其標準組態中,Unison 會同步化整個目錄樹狀結構。出現在樹狀結構中的新檔案會自動包括在同步化中。
在 Subversion 或 CVS 中,必須分別使用 svn add 或 cvs add 指令,以明確地新增目錄與檔案。這讓使用者對於要同步化的檔案擁有更大的控制權。另一方面,新檔案時常會被忽略,特別是在處理大量的檔案而忽略了 svn update 以及 svn status 或 cvs update 輸出中的問號時。
Subversion 或 CVS 還有另一項功能,就是可以重新建構舊的檔案版本。每個變更都可以插入簡短的編輯符號,而且之後可以根據其內容與符號輕易地追蹤檔案的發展。這對論文與程式文字而言,是一種很珍貴的助力。
所有相關主機的硬碟都需要有足夠的可用空間,來儲存所有分散式的資料。Subversion 與 CVS 在伺服器上還需要額外的空間,供儲存區資料庫使用。檔案歷程記錄也會儲存在伺服器上,因此需要更多的空間。當文字格式的檔案變更時,只需儲存修改過的那幾行。每當變更檔案時,二進位檔案就會需要與該檔案大小相同的額外空間。
Unison 提供圖形使用者介面,可顯示 Unison 所要執行的同步化程序。 接受提議或排除同步化中的個別檔案。在文字模式中,以互動式的方式確認個別程序。
有經驗的使用者通常會從指令行執行 Subversion 或 CVS。然而,在 Linux 系統中也有 cervisia 之類的圖形使用者介面,其他作業系統中也有 wincvs 之類的圖形使用者介面。許多開發工具 (像是 kdevelop) 以及文字編輯器 (像是 emacs) 都支援 CVS 或 Subversion。使用這些前端程式的話,衝突的解決方案通常會更容易執行。
Unison 與 rsync 使用簡便,而且也適於新手使用。CVS 與 Subversion 則比較難操作。使用者必須瞭解儲存區與本機資料之間的互動。對資料的變更應該先在本機上與儲存區合併。這是使用 cvs update 或 svn update 指令來執行。接著必須使用 cvs commit 或 svn commit 指令將資料傳送回儲存區。只要瞭解此程序,即使是新手也能輕鬆使用 CVS 或 Subversion。
在傳輸期間,應該保護資料以防攔截和竄改。Unison、CVS、rsync 以及 Subversion 都可以透過 ssh (安全的外圍程式) 來使用,提供安全性以防護此類攻擊。應該避免透過 rsh (遠端外圍程式) 執行 CVS 或 Unison。同樣地不建議在不安全的網路中使用 pserver 機制存取 CVS。Subversion 與 Apache 一起執行,便提供了必要的安全性措施。
開發人員使用 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) |
資料損失 | + | ++/++ | + | + |