轉自:http://www.svn8.com/SVNSY/20090326/3997.html
什麼是SVN? 什麼是CVS? SVN跟CVS又有什麼關係呢?
SVN全名Subversion,即版本控制系統。SVN與CVS一樣,是一個跨平臺的軟體,支援大多數常見的作業系統。作為一個開源的版本控制系統,Subversion 管理著隨時間改變的資料。
SVN與CVS一樣,是一個跨平臺的軟體,支援大多數常見的作業系統。作為一個開源的版本控制系統,Subversion 管理著隨時間改變的資料。 這些資料放置在一箇中央資料檔案庫 (repository) 中。 這個檔案庫很像一個普通的檔案伺服器, 不過它會記住每一次檔案的變動。 這樣你就可以把檔案恢復到舊的版本, 或是瀏覽檔案的變動歷史。Subversion 是一個通用的系統, 可用來管理任何型別的檔案, 其中包括了程式原始碼。
SubVersion:實現服務系統的軟體。
TortoiseSVN:是SVN客戶端程式,為windows外殼程式整合到windows資源管理器和檔案管理系統的Subversion客戶端。
SVNService.exe:是專為 SubVersion 開發的一個用來作為 Win32 服務掛接的入口程式。
AnkhSVN:是一個專為Visual Studio提供SVN的外掛。
參考資料:http://subversion.tigris.org/
版本控制是管理資料變更的一種技術。對於程式設計師來說,它已經成為不可或缺的工具,因為他們經常修改軟體程式碼,產生部分的變更,然後第二天再取消所有的變更。想象有一群程式設計師同時工作的情況你就能理解,為什麼需要一個良好的系統來管理可能出現的混亂。
什麼是 Subversion?
Subversion 是一個開源的版本控制系統, 也就是說 Subversion 管理著隨時間改變的資料。 這些資料放置在一箇中央資料檔案庫 (repository) 中。 這個檔案庫很像一個普通的檔案伺服器, 不過它會記住每一次檔案的變動。 這樣你就可以把檔案恢復到舊的版本, 或是瀏覽檔案的變動歷史。 許多人會把版本控制系統想像成某種 “時光機器”。
某些版本控制系統也是 SCM(software configuration management) 系統。 這些系統是特別設計來管理大量程式碼的, 而且具有許多專門針對軟體開發的功能,像通俗易懂的程式語言, 或是提供編譯軟體的工作。 不過 Subversion 並不是這樣的系統; 它是一個通用的系統, 可用來管理任何型別的檔案, 其中包括了程式原始碼
Subversion 的歷史
早在2000年,CollabNet, Inc.(http://www.collab.net/)就開始召集開發人員開發CVS的替代品。CollabNet 提供一套名為SourceCast協同工作套件,其中的一部分元件是版本控制。雖然SourceCast使用CVS作為其最初的版本控制系統,但是CVS的種種限制從一開始就處處可見,最後CollabNet明白必須要找到一個更好的解決方案。不幸的是,至少在免費license中,因為沒有更好的選擇,CVS已經廣泛成為了開源世界中事實上的標準。所以CollabNet決定開發一個新的版本控制系統,保留CVS的基本特性但去處CVS的bug和不好的特性。
在2000年2月,他們聯絡《使用CVS開發開源專案》(Open Source Development with CVS)(Coriolis, 1999)的作者Karl Fogel,並徵求了他是否願意在這個新的專案中擔任一個角色。巧合的是,當時Karl已經和他的朋友Jim Blandy討論了一個關於新的版本控制系統的設計。在1995年,這兩人就成立了Cyclic Software,一個提供CVS的商業支援的軟體公司。雖然他們經營商業服務,但是仍然在每天都在工作中使用CVS。使用CVS的挫折感使得Jim認真思考更好的方法來管理資料,不但確定名字為“Subversion”,而且完成了Subversion檔案庫的基礎設計。
當CollabNet的電話到來時,Karl立即答應了加入專案中,而且Jim讓他的僱主RedHat Software同意讓他在這個專案中不定期工作。CollabNet僱用了Karl和Ben Collins-Sussman,並在5月開始了詳細設計工作。在得到了來自CollabNet的Brian Behlendorf、Jason Robbins和Greg Stein(當時是一名活躍在WebDAV/DeltaV規範過程的自由程式設計師)很多創意的幫助下,Subversion很快地引起了一個活躍開發者社群的注意。它找出並歡迎很多同樣在CVS上受到挫折的社員能來為這個專案做點什麼。
Subversion 最初的設計Team定下了幾個簡單的目標。 它必須在功能上可取代 CVS,也就是說, 所有 CVS 可做到的事, 它都要能夠作到。 在修正最明顯的瑕疵的同時, 還要保留相同的開發模式。 還有, Subversion 應該要和 CVS 很相像, 任何 CVS 使用者只要花費少許的力氣, 就可以很快地上手。
經過十四個月的編碼後, Subversion 於2001年8月31日開始實現 “自行管理”。 也就是說, 開發人員不再使用 CVS 來管理 Subversion 的程式碼, 而以 Subversion 自己來管理。
從啟動這個專案到現在,雖然CollabNet提供了大部分的資金(它付出幾位全職 Subversion 開發人員的薪水), 但這還是個開源專案, 由一組鬆散透明的規則所約定。 CollabNet 擁有程式碼的版權完全符合 Debian Free Software Guidelines。 換句話說, 每個人都可以隨意地免費下載、修改、以及重新發布 Subversion; 完全不需要經過 CollabNet, 或是任何人的允許。
Subversion提供以下主要功能:
目錄版本控制
CVS 只能跟蹤單個檔案的歷史, 不過 Subversion 實作了一個 “虛擬” 的版本控管檔案系統, 能夠依時間跟蹤整個目錄的變動。 目錄和檔案都能進行版本控制。
真實的版本歷史
自從CVS限制了檔案的版本記錄,CVS並不支援那些可能發生在檔案上,但會影響所在目錄內容的操作,如同複製和重新命名。除此之外,在CVS裡你不能用擁有同樣名字但是沒有繼承老版本歷史或者根本沒有關係的檔案替換一個已經納入系統的檔案。在Subversion中,你可以增加(add)、刪除(delete)、複製(copy)和重新命名(rename),無論是檔案還是目錄。所有的新加的檔案都從一個新的、乾淨的版本開始。
自動提交
一個提交動作,不是全部更新到了檔案庫中,就是完全不更新。這允許開發人員以邏輯區間建立並提交變動,以防止當部分提交成功時出現的問題。
納入版本控管的後設資料
每一個檔案與目錄都附有一組屬性關鍵字並和屬性值相關聯。你可以建立, 並儲存任何你想要的Key/Value對。 屬性是隨著時間來作版本控管的, 就像檔案內容一樣。
選擇不同的網路層
Subversion 有抽象的檔案庫存取概念, 可以讓人很容易地實作新的網路機制。 Subversion 可以作為一個擴充套件模組嵌入到Apache HTTP 伺服器中。這個為Subversion提供了非常先進的穩定性和協同工作能力,除此之外還提供了許多重要功能: 舉例來說, 有身份認證, 授權, 線上壓縮, 以及檔案庫瀏覽等等。還有一個輕量級的獨立Subversion伺服器, 使用的是自定義的通訊協議, 可以很容易地通過 ssh 以 tunnel 方式使用。
一致的資料處理方式
Subversion 使用二進位制差異演算法來異表示檔案的差異, 它對文字(人類可理解的)與二進位制檔案(人類無法理解的) 兩類的檔案都一視同仁。 這兩類的檔案都同樣地以壓縮形式儲存在檔案庫中, 而且檔案差異是以兩個方向在網路上傳輸的。
有效的分支(branch)與標籤(tag)
在分支與標籤上的消耗並不必一定要與專案大小成正比。 Subversion 建立分支與標籤的方法, 就只是複製該專案, 使用的方法就類似於硬連線(hard-link)。 所以這些操作只會花費很小, 而且是固定的時間。
Hackability
Subversion沒有任何的歷史包袱; 它主要是一群共用的 C 程式庫, 具有定義完善的API。這使得 Subversion 便於維護, 並且可被其它應用程式與程式語言使用。