什麼是SVN

CVS:Concurrent   Version   System.  版本控制工具。用於管理項目代碼與協調多人協作開發的。功能夠強大。
SVN:subversionCVS:Concurrent   Version   System.    
VSS:微軟的
CleanCase:Rational   Rose的

版本控制是管理數據變更的一種技術。對於程序員來說,它已經成爲不可或缺的工具,因爲他們經常修改軟件代碼,產生部分的變更,然後第二天再取消所有的變更。想象有一羣程序員同時工作的情況你就能理解,爲什麼需要一個良好的系統來管理可能出現的混亂。什麼是 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 便於維護, 並且可被其它應用程序與程序語言使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章