1. 程式人生 > >版本控制工具的必要性、作用、分類和發展歷程

版本控制工具的必要性、作用、分類和發展歷程

一、版本控制工具的作用和必要性

所謂版本控制系統(Version Control System),從狹義上來說,它是軟體專案開發過程中用於儲存我們所寫的程式碼所有修訂版本的軟體,但事實上我們可以將任何對專案有幫助的文件交付版本控制系統進行管理。

如果在開發團隊中沒有使用版本控制,多個開發人員共同負責同一個軟體文件的開發,每個人在各自的機器上有整個軟體文件的備份,並對之實施程式設計開發,在分別完成各自任務之後,再通過文字比對工具將各自機器上的不同版本的程式整合到一臺機器上。沒有進行版本控制或者版本控制本身缺乏正確的流程管理,在軟體開發過程中將會引入很多問題,如軟體程式碼的一致性、軟體內容的冗餘、軟體過程的事物性、軟體開發過程中的併發性、軟體原始碼的安全性,以及軟體的整合等問題。

版本控制的目的是實現開發團隊並行開發、提高開發效率的基礎。其目的在於對軟體開發程序中檔案或目錄的發展過程提供有效的追蹤手段,保證在需要時可回到舊的版本,避免檔案的丟失、修改的丟失和相互覆蓋,通過對版本庫的訪問控制避免未經授權的訪問和修改,達到有效保護企業軟體資產和智慧財產權的目的。

版本控制的功能在於跟蹤記錄整個軟體的開發過程,包括軟體本身和相關文件,以便對不同階段的軟體及相關文件進行表示並進行差別分析,對軟體程式碼進行可撤消的修改,便於彙總不同開發人員所做的修改,輔助協調和管理軟體開發團隊。

版本控制在空間上可以保證完成集中統一管理,解決一致性和冗餘問題。在開發工作中,開發人員在提交軟體程式碼的時候一般採用伺服器/客戶端方式,儘管開發人員可以在自己的本地留有備份,但最終唯一有效的只有伺服器端的程式程式碼;在時間上全程跟蹤記錄工具將會自動記錄開發過程中的每個更改細節,和不同時期的不同版本。這在一定程度上可以解決冗餘、事務性處理併發性問題。專案管理人員可以通過版本控制對團隊中的不同人員,實施操作許可權的控制。對於不同角色的開發人員,對軟體的不同部分可以定義不同的訪問許可權。這在一定程度可以解決軟體安全性問題。版本控制工具的使用,可以減輕開發人員的負擔,節省時間,同時降低人為錯誤。

簡而言之:

1.版本控制能實現開發團隊並行開發、提高開發效率。

2.版本控制可以保證完成集中統一管理,解決一致性和冗餘問題。

3.版本控制可以保證解決軟體開發過程中的併發性,軟體原始碼的安全性,以及軟體的整合。

4.版本控制能夠跟蹤記錄整個軟體的開發過程,輔助協調和管理軟體開發。

 

二、版本控制工具的分類

版本控制工具(Version Control System)的分為3類:

1、直接訪問式版本控制系統;

2、集中式版本控制工具,比如CVS、SVN;

3、分散式版本控制工具,比如git      

 

集中式版本控制工具和分散式版本控制工具的區別在於:開發人員之間相互同步修改內容的方式不同。

 

三、版本控制工具的發展歷程

VCS的發展歷程:

(1)、手工階段,沒有版本控制工具或者有但是不用版本控制工具。

(2)、早期VCS階段:             

這類系統要求系統的使用者必須登入到版本庫所在的伺服器才能訪問版本庫。            

侷限性:存在可擴充套件性方面的問題。

(3)、集中式VCS階段:            

CVS和SVN解決上述早期版本控制工具的可擴充套件性問題。這類版本控制工具允許程式設計師通過網路來獲取版本庫中的程式碼,並且在修改之後提交回來。這類系統解決可擴充套件性問題是通過客戶端來解決的,客戶端可以有無數個,但是版本庫所在的服務端也還是隻有一個,客戶端可以隨意安裝,這樣就解決了可擴充套件性的問題。           

具體的使用方法:每一個程式設計師在本地有一個工作目錄樹,其內容是該版本庫中最新的程式碼。當他們在工作目錄樹中完成程式碼修改之後,就把改動提交會該程式碼庫。           

侷限性:在本地工作目錄樹中只會看到程式碼的最新版本,如果想要查詢歷史修改記錄,就必須與伺服器上的版本庫打交道。這樣要和遠端的版本庫打交道,就必須使用網路,但是即使今天的網際網路處於永不斷線的狀態,有的時候還是不能上網。所以分散式版本控制工具就解決了這個問題,以git為代表的分散式版本控制工具使每個使用者在本地都有自己的版本庫,而不是連線到公共伺服器上的一個公共版本庫中去。

(4)、分散式版本控制工具階段:           

所有的版本控制工具都儲存在本地版本庫中,向版本庫提交程式碼無需連結遠端版本庫,所有的歷史記錄都儲存在本地版本庫中,向版本庫提交程式碼無須連線遠端版本庫,而是所有的版本資料都存放在本地版本庫中。          

 

分散式版本控制工具程式設計師之間如何傳遞各自的修改,如何同步呢?程式設計師還是將修改上傳到專案的主版本庫中去。

有兩種實現方式:(1)通過git的push操作直接把修改上傳到主版本庫;(2)生成包含少量修改的補丁包,把補丁包提交給專案維護人員,再由專案維護人員更新主版本庫。  

 

四、選擇版本控制工具時值得注意的問題

 

首先、版本控制工具它本身是一個工具,工具是比人工先進一些,但是我們依然可以選擇使用它,也可以選擇不使用它。          

比如在學校的時候一直就沒有使用過版本控制工具,寫論文、寫程式碼都是在自己電腦上儲存,每當自己寫的東西有一個新版本產生的時候,就用另存為來再存一份。  

 

其次、不要因為盲目比較版本控制工具的優劣。          

即使使用了版本控制工具,也還有不同的版本控制工具之分,有比較早期的cvs、svn,也有最新的git,我們在選用的時候可以按照自己的想法,熟悉什麼就選用什麼,沒有必要一味線性的看待問題,即不用覺得git一定比svn先進,所以使用git就比使用svn好,同樣,不要以為使用git就比使用svn高階之類的,能解決問題就好,理智看待這個問題。

 

作者:Roger_CoderLife

連結:https:blog.csdn.net/Roger_CoderLife/article/details/84372586

本文為Roger_CoderLife的原創文章,著作權歸作者所有,轉載請註明原文出處,歡迎轉載!