1. 技術內幕
- Subversion
- 集中式版本控制的典型代表。CVS 的最佳替代者,是開源軟件安裝量最大的版本控制系統。是開源軟件自身生存和繼續發展的基礎軟件。
- Bazaar
- 與 Ubuntu 一起成長的分布式版本控制系統。實現賣主分支另外的方法,下一代個人版本控制系統。
- SVK
- 用SVK這一在 SVN 上實現的分布式管理系統,曾經作為 Subversion 分布部署的最佳選擇,今天已經顯得過時了。我們有更好的跨地域版本控制的方案。
- Eclipse + Subclipse
- 在最流行的集成開發工具上使用最流行的版本控制工具。
- TortoiseSVN
- 如果你使用 Windows 平臺的話。
- 命令行
- 解除 Windows 程序員對命令行的恐懼。
2. 分布式還是集中式版本控制
分布式版本控制系統已成爆發之勢,越來越多的開源軟件使用諸如 GNU arch, Bazaar, Mercurial, Git, SVK等分布式版本控制系統。 這一方面是開源軟件開發的本質(全部源碼公開,跨地域的開發團隊)決定的,另一方面是管理角度(服務器擴展性,基于信任鏈的代碼提交)。
我們認為了解分布式版本控制系統,對于程序員是必要的,因為:
- 從開源社區汲取營養的需要;
- 對第三方只讀源碼庫維護的需要;
- 下一代個人版本控制工具;
我們認為“集中式”版本控制系統,仍然是商業企業軟件開發中的首選,因為是企業對授權和集中管理的需要。 即使有跨地域開發的需要,我們也可以通過鏡像、代理等方式實現 Subversion 的高效運行。
比較項目 |
分布式(bzr) |
集中式(svn) |
|
性能 |
服務器擴展能力 |
★★★ |
★ |
網絡帶寬占用 |
☆ |
☆☆☆ |
|
本地保存的完整版本歷史 |
★★★ |
- |
|
安全 |
歷史版本的安全驗證 |
★★★ |
- |
數據安全(BCP) |
★★★ |
★ |
|
分支操作 |
代碼合并(merge)能力 |
★★★ |
★★ |
分支管理 |
★★★ |
★★★ |
|
分支建立速度 |
★ |
★★★ |
|
用戶界面 |
使用平臺廣泛性 |
★★★ |
★★★ |
命令行可用性 |
★★★ |
★★★ |
|
Windows圖形界面 |
★ |
★★★ |
|
權限管理 |
統一的用戶帳號 |
- |
★★★ |
針對目錄的 Checkout |
- |
★★★ |
|
目錄授權 |
- |
★★★ |
|
分支授權 |
★ |
★★★ |
|
其他 |
遠程版本庫復制 |
★★★ |
★★★ |
離線提交 |
★★★ |
- |
3. SVN 和 CVS 的對照
我們選擇 Subversion(SVN) 作為企業版本控制工具的首選,而不是 CVS。不是因為我們使用 Subversion 時間更久,也不是因為我們對 Subversion 更有感情。恰恰相反,CVS 很早就已經滲透到我們的血液中。關于 CVS 可以參考我們這個文檔: 《CVS 版本控制》。
多年的使用 CVS 的開發經驗,我們深感 CVS 在使用和管理上的不足。下面是 SVN 和 CVS 的對照。
比較項目 |
CVS |
SVN |
|
權限控制 |
是否依賴系統帳號 |
依賴 |
不依賴 |
可否對分支授權 |
否 |
是 |
|
是否支持LDAP認證 |
否 |
是 |
|
圖形化帳號管理 |
否 |
是(集中管理平臺) |
|
用戶可否獲取忘記口令,修改口令 |
否 |
是(集中管理平臺) |
|
目錄,文件名變更 |
否 |
是 |
|
分支管理 |
創建分支時間 |
耗時* |
快 |
分支可見、查詢 |
難 |
易 |
|
二進制文件 |
二進制優化 |
否 |
是 |
二進制文件標識 |
手工 |
自動 |
|
二進制文件(圖形文件)被破壞 |
易破壞 |
不易破壞 |
|
事物處理 |
量子提交 |
否 |
是 |
修改提交說明 |
單個文件 |
是 |
|
換行符 |
可否指定換行符類型 |
否 |
是 |
檢查換行符設定,避免跨平臺開發帶來的混亂 |
否 |
是 |
|
功能擴展 |
CVSROOT |
hooks 腳本 |
|
網絡帶寬 |
網絡帶寬占用 |
高 |
低 |
脫機命令 |
否 |
部分 |
4. SVN 和 商業版本控制系統的對照
那么商業的版本控制工具如何呢?我們要大聲告訴你,不要!不要把您的核心資產——“代碼”讓他人綁架!
比較項目 |
某商業軟件 |
SVN |
|
服務器端存儲 |
是否依賴數據庫(額外的管理負擔) |
依賴 |
不依賴 |
數據存儲格式是否開放 |
否 |
是 |
|
是否可以將版本庫導出?以便重建、導入其他項目、分發給第三方或者配置管理軟件切換。 |
否 |
是 |
|
是否可以對服務器端存儲進行整理 |
否 |
是 |
|
是否可以徹底刪除配置項 |
否 |
是* |
|
可否通過插件進行功能擴展? |
否 |
是 |
|
命令行 |
命令行功能是否完備?以便實現工作自動化 |
否 |
是 |
是否可以集成到自動編譯(nightly build)系統? |
否 |
是 |
|
文件狀態保持 |
客戶端本地是否有配置文件以保持狀態? |
否 |
是 |
是否依靠服務器端進行狀態保持? |
是 |
否 |
|
客戶端是否可以脫機運行? |
否 |
是 |
|
工具整合 |
是否可以和資源管理器整合? |
否 |
是 |
是否有 Eclipse 插件? |
否 |
是 |
|
成本 |
軟件本身成本 |
高 |
低 |
培訓成本 |
高 |
低 |
5. 群英匯:功能擴展
-
與“開源速遞·集中管理”平臺整合;
- Hooks 插件擴展;
- 改進的二進制文件和文件換行符屬性沖突檢查;
- Subversion 管理員命令行;
- 其他 bugfix ...
6. 為什么選擇群英匯