# Appendix?A.?自由版本控制系統
這些是在2007年中段我所知的所有開源版本控制系統。我日常唯一使用的是Subversion。除了Subversion和CVS,我對大多數系統僅有很少,甚至沒有任何經驗;這里的信息取自他們的網站。也請看[http://en.wikipedia.org/wiki/List_of_revision_control_software](http://en.wikipedia.org/wiki/List_of_revision_control_software)。
### **CVS**?—?[http://www.nongnu.org/cvs/](http://www.nongnu.org/cvs/)
CVS已經有很長的歷史了,許多程序員已經非常熟悉。它曾經是革命性的:它是第一個開源版本控制系統,在網絡上被開發者廣泛使用(在我所知的范圍內),也是第一個提供匿名只讀檢出的系統,可以讓心開發者輕松的開始參與項目。CVS只能版本化文件,但不包括目錄;它能提供分支、標簽和優良的客戶端性能,但不能很好的處理大文件和二進制文件。它也不支持原子提交。*[免責聲明:在開始替代CVS的Subversion項目前,我也在CVS開發上活躍了大約5年。]*
### **Subversion**?—?[http://subversion.tigris.org/](http://subversion.tigris.org/)
Subversion是最早也是最重要的CVS替代者—也就是以與CVS近似的方法實現版本控制,但沒有經常困擾CVS用戶的一些問題和特性缺失。Subversion的一個目標就是使已經習慣CVS的用戶能夠平滑的過渡到Subversion。這里沒有空間詳細描述Subversion的特性;相關信息請看它的網站*[免責聲明:我參與了Subversion開發,也是在日常中唯一使用的系統。]*
### **SVK**?—?[http://svk.elixus.org/](http://svk.elixus.org/)
盡管SVK建立在Subversion之上,但它更類似于下面說的一些非集中式的系統,而不是Subversion。SVK支持分布式開發、本地提交、精密的變更合并和從非SVK版本控制系統鏡像目錄樹的能力。詳細信息可以看它的網站。
### **Mercurial**?—?[http://www.selenic.com/mercurial/](http://www.selenic.com/mercurial/)
Mercurial是一個分布式版本控制系統,提供“完整的文件和變更集的跨索引;有效率的帶寬和CPU下的HTTP和SSH同步協議;開發者分支間的任意合并;集成獨立的web界面;UNIX、MacOS X和Windows跨平臺能力”以及更多(前面的特性列表來自Mercurial網站)。
### **GIT**?—?[http://git.or.cz/](http://git.or.cz/)
GIT是Linus Torvalds開啟的一個用于管理Linux kernel源代碼的項目。一開始GIT僅僅限于滿足kernel開發的需要,但不久就超出了這個范圍,被用于Linux kernel之外的項目中。它的主頁上說“...設計用于快速有效的處理非常大的項目;主要用于各種開源項目,最引人注目的是Linux kernel。 Git屬于分布式源代碼管理工具,類似于GNU Arch或Monotone(或私有世界的BitKeeper)。每個Git工作目錄是一個完整的版本庫,包含了完整的修訂跟蹤能力,不依賴于網絡訪問或中央服務器。”
### **Bazaar**?—?[http://bazaar.canonical.com/](http://bazaar.canonical.com/)
Bazaar還處于開發中。它是GNU Arch協議的一個實現,并依然隨著演進的GNU Arch協議保持兼容,而且與GNU Arch社區中對于需要用戶友好的任何協議變更的進程進行配合,。
### **Bazaar-NG**?—?[http://bazaar-ng.org/](http://bazaar-ng.org/)
Bazaar-NG(或bzr)目前由Canonical([http://canonical.com/](http://canonical.com/))開發。它提供了一種在單個項目中結合集中式和非集中式工作的選擇。例如,當在辦公室中,你可以在一個共享的中央分支上工作;對于實驗性變更或離線工作,你可以在筆記本上建立一個分支,并在之后合并回去。
### **Darcs**?—?[http://abridgegame.org/darcs/](http://abridgegame.org/darcs/)
“David的高級修訂控制系統(Advanced Revision Control System)是另一個CVS的替代者。它由Haskell編寫,已經用于Linux、MacOS X、FreeBSD、OpenBSD和Microsoft Windows。Darcs包含一個可以查看版本庫內容的cgi腳本。”
### **Arch**?—?[http://www.gnu.org/software/gnu-arch/](http://www.gnu.org/software/gnu-arch/)
GNU Arch同時支持分布式和集中式的開發。開發者將變更提交到一個可以是位于本地的”歸檔(archive)“,而管理員可以根據情況將變更推和拉到其他歸檔。這個方法學暗示了Arch提供比CVS更精密的合并。Arch也允許一個人輕松的為沒有提交權限的人建立歸檔的分支。這里只是簡短的描述;更多細節請看Arch網頁。
### **monotone**?—?[http://www.venge.net/monotone/](http://www.venge.net/monotone/)
”monotone是自由分布式版本控制工具。它提供了一個簡單,單個文件事務的版本存儲,包含完全無連接的操作,以及有效率的端到端同步協議。它理解歷史敏感的合并,輕量級的分支、集成代碼評審和第三方測試。它使用加密的命名和客戶端的RSA憑證。它也有不錯的國際化支持,沒有外部依賴,可以按照GNU GPL運行在linux、solaris、OSX和windows上。“
### **Codeville**?—?[http://codeville.org/](http://codeville.org/)
”為什么需要另一種版本控制系統?所有其他版本控制系統需要你小心跟蹤分支間的關系,這樣你才能不會重復合并同一個沖突。Codeville更加自由。它允許你隨時更新或提交到任意版本庫,而無需擔心重復合并。“
”Codeville為每個完成的變更創建一個標識符,并記住每個文件已經已經應用的變更列表。如果有沖突,它會檢查某一方是否已經應用到另一方,如果是這樣,則使另一方自動獲勝。如果確實有非自動的可合并的版本沖突,codeville則與CVS的工作方式相同。“
### **Vesta**?—?[http://www.vestasys.org/](http://www.vestasys.org/)
”Vesta是一個可移植的SCM[軟件配置管理]系統,旨在支持任意規模的,從相對較小(小于10000行源代碼)到非常巨大(10000000行)的軟件系統的開發。“
”Vesta是一個成熟的系統。它是Compaq/Digital系統研究中心10年研究和開發的成果,它是Compaq的Alpha微處理器團隊兩年半的時間里生產使用的系統。Alpha團隊有超過150個活躍開發者位于距離幾千英里的兩地,分別在美國的西海岸和東海岸。該團隊使用Vesta管理編譯超過130MB的源數據,會產生1.5GB的衍生數據。東部的構建每天會產生10到15GB的衍生數據,全部由Vesta管理。盡管Vesta主要關注的是軟件開發,但Vesta Alpha團隊設法使系統可以用于硬件開發,將它們的硬件描述語言檢入到Vesta的源代碼控制用具中,并使用Vesta構建器構建模擬器和其他衍生的對象。前Alpha團隊的成員,現在是Intel的一部分,在新的微處理器項目中還是繼續使用Vesta。“
### **Aegis**?—?[http://aegis.sourceforge.net/](http://aegis.sourceforge.net/)
”Aegis是一個基于事務的軟件配置管理系統。它提供了一個框架,在其中一個團隊的開發者可以獨立的為程序的多個變更工作,而Aegis協調將這些變更集成到程序的主源中,并盡可能減少中斷。“
### **CVSNT**?—?[http://cvsnt.org/](http://cvsnt.org/)
”CVSNT一個高級跨平臺的版本控制系統。與行業的標準CVS協議相比,添加了許多附加特性。 ... CVSNT是開源,使用GNU GPL許可證的自由軟件。“它的特性列表包括通過CVS協議的認證,以及Windows特定的SSPI和活動目錄。支持安全傳輸,通過sserver或加密的SSPI;跨平臺性(可以運行于Windows或Unix環境);NT版本與Win32系統完全集成;MergePoint處理的含義是沒有更多的標簽和合并;處于活躍開發中。
### **META-CVS**?—?[http://users.footprints.net/~kaz/mcvs.html](http://users.footprints.net/~kaz/mcvs.html)
”Meta-CVS是一個建立在CVS周邊的版本控制系統。盡管它保留了CVS的大多數特征,包括所有的網絡支持,它比CVS能干,更易于使用。“META-CVS的站點包括的特性列表:目錄結構版本化,改進的文件類型處理,類似和更用戶友好的分支和合并,支持符號鏈接,附加屬性列表的版本化數據,改進的第三方數據導入,以及易于從CVS升級。
### **OpenCM**?—?[http://www.opencm.org/](http://www.opencm.org/)
”OpenCM設計為一個安全的,CVS的高完整性替代產品。關鍵特性列表可以在特性頁面找到。雖然不像CVS那樣‘特性豐富’,但它提供了一些CVS缺乏的特性。簡要來說,OpenCM提供了第一流的重命名、配置、加密認證和訪問控制和第一流的分支。“
### **Stellation**?—?[http://www.eclipse.org/stellation/](http://www.eclipse.org/stellation/)
”Stellation是一個高級,可擴展的軟件配置管理系統,最初由IBM研究院開發。雖然Stellation提供了任何SCM系統提供的所有標準功能,但它也提供了許多高級特性,例如面向任務的變更管理,一致的項目版權化和輕量級的分支,目的是簡化由松散結合的開發者組成的大規模團隊開發軟件系統的難度。“
### **PRCS**?—?[http://prcs.sourceforge.net/](http://prcs.sourceforge.net/)
”PRCS,項目修訂控制系統是一系列工具(如CVS)的前端,提供了一種以一個整體管理一組文件和目錄的方法,保存了整個集合的一致版本。 ... 它的目的類似于SCCS、RCS和CVS,但是(至少根據其作者稱)與這些工具相比更加簡單。“
### **ArX**?—?[http://www.nongnu.org/arx/](http://www.nongnu.org/arx/)
ArX是一個分布式修訂控制系統,提供了分支和合并特征,加密數據完整性驗證和將歸檔輕松發布到任意HTTP服務器的能力。
### **SourceJammer**?—?[http://sourcejammer.org/](http://sourcejammer.org/)
”SourceJammer是一個使用Java編寫的源代碼控制和版本化系統。它由服務器端維護文件和版本歷史,處理檢入、檢出等功能的組件,以及客戶端向服務器發起請求并管理客戶端文件系統的組件組成。 “
### **FastCST**?—?[http://www.zedshaw.com/projects/fastcst/index.html](http://www.zedshaw.com/projects/fastcst/index.html)
”一個使用文件修訂變更集,并且分布式而非集中控制的‘現代’系統。只要你有一個郵件帳號,你就可以使用FastCST。對于較大的分發,只需要一個FTP服務器和一個HTTP服務器,或使用內置的‘serve’命令來直接提供服務。所有的變更集都是全局唯一,并且有大量元數據,這樣你可以拒絕任何未經測試的東西。合并是通過比較合并的變更集和當前的目錄內容完成的,而不是試圖將其與另一個變更集合并。“
### **Superversion**?—?[http://www.superversion.org/](http://www.superversion.org/)
”Superversion是一個基于變更集的多用戶分布式版本控制系統。它的目標是成為一個行業力量,商業解決方案的開源選擇,提供相同(或更簡單)的易用性和類似的強大。實際上,從一開始,直覺和可用的效率就處于Superversion開發的最高優先級之一。 “
- 前言
- 為什么寫這本書?
- 誰應該讀本書?
- 資料來源
- 致謝
- 免責聲明
- 1. 介紹
- 歷史
- 現狀
- 2. 起步
- 從你擁有的開始
- 選擇許可證并應用
- 設置風格
- 通告
- 3. 技術基礎設施
- 一個項目需要什么
- 郵件列表
- 版本控制
- Bug跟蹤
- IRC / 實時聊天系統
- RSS供稿
- Wikis
- 網站
- 4. 社會和政治的基礎架構
- 慈善獨裁者
- 共識為基礎的民主(Consensus-based Democracy)
- 寫下所有的內容
- 5. 金錢
- 參與的類型
- 長期雇傭
- 作為一些個體出現,而不是一個整體
- 公開你的動機
- 錢不能讓你可愛
- 契約
- 資助非編程活動
- 市場營銷
- 6. 交流
- 人如其文
- 避免常見的陷阱
- 刺兒頭
- 處理成長
- Bug跟蹤系統中無對話
- 公開性
- 7. 打包、發布和日常開發
- 版本號
- 發布分支
- 穩定發布版本
- 打包
- 測試和發布
- 維護多發布線
- 發布和日常開發
- 8. 管理志愿者
- 從志愿者中獲取最多
- 像分擔技術任務一樣分擔管理任務
- 轉化
- 提交者
- 榮譽
- 分叉
- 9. 許可證,版權和專利
- 術語
- 許可證的方面
- GPL和許可證兼容性
- 選擇一個許可證
- 版權分配和所有權
- 雙許可證模式
- 專利
- 深入資源
- A. 自由版本控制系統
- B. 自由Bug跟蹤系統
- C. 為什么我要關注車棚的顏色?
- D. 報告bug的樣例指導
- E. 版權