開發過程中,常遇到的問題:
- 檔案被覆蓋
- 檔案遺失
- 想比對各版本的程式碼之間的差異
- 想回覆到更早的版本
- code被更改
- 軟體發行之後,必須凍結共用的程式碼一段時間,免得其他人在改 bug 的同時,因為你修改了共用的程式而增加更多新的問題
如果有以上情形,你需要的是對專案進行版本控制(version control)。版本控制也有人稱它為原始碼控制(source code control),是供應鏈管理(SCM)的一環,其目的即在於解決上述各種問題。
你可以:
隨時復原錯誤,將檔案恢復到之前任一版本,多人同時修改同一檔案,不會有相互覆蓋的情形,保留所有修改歷程,即使程式碼有被動過,可以很容易找到在哪個時間點被誰修改;在發行正式版的同時,還能繼續發展新版本,無須下令凍結所有程式碼。
Subversion是一個自由/開放源碼的版本控制系統,也就是說Subversion管理著隨時間改變的任何類型檔案。系統使用一種複製-修改-合併的模型,作為鎖定的取代方法。在這種模型下,每一個使用者用戶端會讀取檔案庫,然後建立檔案或計畫的工作複本,然後使用者進行各自的工作,修改他們自己的私有複本。最後,私有複本會合併在一起,以產生一個新的、最後的版本。
Subversion的好處:
- 目錄版本控制:Subversion實作了一個虛擬的版本控管系統,能夠依時間追蹤整個目錄的更動。目錄和檔案都被納入版本控管。
- 不可分割的送交:一個送交動作,不是導致所有更動都送入檔案庫,就是完全不會送入。這讓發展人員以邏輯區段建立更動,並送交更動。
- 納入版本控管的描述資料:每一個檔案與目錄都附有一組隱形性質(隨時間來作版本控管的,如同檔案內容),可自己創新,並儲存任何你想要的鍵值對。
- 選擇不同的網路層:Subversion 有抽象的檔案庫存取概念,可以讓人很容易地實作新的網路機制. Subversion的網路伺器,,是Apache網頁伺服器的一個模組,它以稱為 WebDAV/DeltaV的HTTP變體協定與外界溝通。這對 Subversion的穩定性與互通性有很大的幫助,而且額外提供了許多重要功能:舉例來說,有身份認證、授權、線上壓縮以及檔案庫瀏覽。另外也有小而獨立的Subversion伺服器程式,使用的是自訂的通訊協定,可以很容易地透過ssh以tunnel方式使用。
- 一致的資料處理方式:Subversion使用二進制差異運算法來表示檔案的差異,它對文字與二進制檔案兩類的檔案都一視同仁,這兩類的檔案都同樣地以壓縮形態儲存在檔案庫中,而且檔案差異是以兩個方向在網路上傳送的。
- 更有效率的分支(branch)與標記(tag):分支與標記的花費並不必一定要與計畫大小成正比.。Subversion建立分支與標記的方法,,就只是複製該計畫,使用的方法就像hard-link一樣。所以這些動作只會花費很小,而且是固定的時間。
- Hackability:Subversion沒有任何的歷史包袱,它主要是一群共用的 C 程式庫,具有定義完善的API這使得Subversion便於維護,並且可被其它應用程式與程式語言使用。
雖然Subversion發展的時間不久,但它所提供的便利性與功能性,已經凌駕於其他版本控制系統之上,甚至Subversion的架構、命令程式介面等都刻意模仿CVS(Concurrent Versions System),為的就是讓使用CVS的使用者快速上手,而在CVS的問題不會出現在Subversion。所以Subversion可說是目前最容易上手且是系統開發控制版本的最佳工具。
by.Small train
|