一、version control是什么:
version control版本控制,是指對軟件開發過程中各種程序代碼、配置文件及說明文檔等文件變更的管理,是軟件配置管理的核心思想之一。
二、version control的功能:
版本控制最主要的功能就是追蹤文件的變更。它將什么時候、什么人更改了文件的什么內容等信息忠實地了已錄下來。每一次文件的改變,文件的版本號都將增加。除了記錄版本變更外,版本控制的另一個重要功能是並行開發。軟件開發往往是多人協同作業,版本控制可以有效地解決版本的同步以及不同開發者之間的開發通信問題,提高協同開發的效率。並行開發中最常見的不同版本軟件的錯誤(Bug)修正問題也可以通過版本控制中分支與合並的方法有效地解決。
具體來說,在每一項開發任務中,都需要首先設定開發基線,確定各個配置項的開發初始版本,在開發過程中,開發人員基於開發基線的版本,開發出所需的目標版本。當發生需求變更時,通過對變更的評估,確定變更的影響范圍,對被影響的配置項的版本進行修改,根據變更的性質使配置項的版本樹繼續延伸或產生新的分支,形成新的目標版本,而對於不受變更影響的配置項則不應發產生變動。同時,應能夠將變更所產生的對版本的影響進行記錄和跟蹤。必要時還可以回退到以前的版本。例如當開發需求或需求變更被取消時,就需要有能力將版本回退到開發基線版本。在曾經出現過的季度升級包拆包和重新組包的過程中,其實就是將部分配置項的版本回退到開發基線,將對應不同需求的不同分支重新組合歸並,形成新的升級包版本。
版本控制是軟件配置管理的核心功能。所有置於配置庫中的元素都應自動予以版本的標識,並保證版本命名的唯一性。版本在生成過程中,自動依照設定的使用模型自動分支、演進。除了系統自動記錄的版本信息以外,為了配合軟件開發流程的各個階段。還需要定義、收集一些元數據來記錄版本的輔助信息和規范開發流程,並為今后對軟件過程的度量做好准備。當然如果選用的工具支持,這些輔助數據將能直接統計出過程數據,從而方便軟件過程改進活動的進行。對於配置庫中的各個基線控制項,應該根據其基線的位置和狀態來設置相應的訪問權限。一般來說,對於基線版本之前的各個版本都應處於被鎖定的狀態,如需要對它們進行變更,則應按照變更控制的流程來進行操作。
三、為什么使用version control(與git結合)
1. 版本庫就是一個倉庫,你把東西放進去(通常是你編寫的程序代碼),然后再在需要的時候拿出來。通常這種倉庫都有一個很神奇的地方,你不但能看到你放進去的東西現在的樣子,還能看到它以前的樣子,這就是版本了,同一件東西每次放進去時的樣子都會被保留下來,所以你可以追溯這個東西在任何時期的樣子。那么控制呢?那就有管理的概念在里面了。首先倉庫有自己的結構(通常就是個數據庫),進入倉庫的東西都按照這一結構存放着,無論你把東西放進還是拿出也要遵循你所用倉庫的標准(用專用的版本控制命令或程序),而依靠所提供的程序或命令,你就可以操作這個倉庫,控制里面的內容,並且想看某個東西的任何某個版本都可以。世界上無數大大小小的開發項目都在使用各種各樣的版本控制系統,原因在於它的優點對於一個項目開發來說是無比重要。
一個最簡單的開發團隊,也許就兩三個人,他們共同完成一個軟件的開發。每個人都在修改、添加、刪除着自己本地硬盤上的代碼,當他們把這些代碼匯總起來時,麻煩出現了。到底誰改了哪些文件,具體是文件里的哪部分被改動過?A的修改會不會把B的修改覆蓋掉?匯總的工作變得很危險,需要非常小心,一旦出錯后果不堪設想。顯然此時,效率將會是無比的低下,如果某個地方出錯,可能整個匯總工作就要重來一遍。這只是兩三人的小團隊,如果是幾十人幾百人的大團隊呢?那將會是噩夢如果這個團隊采用了版本控制。那么版本控制軟件在每次提交的時候都會主動合並所有人的修改並解決可能發生的沖突。每個人手里一直都是匯總好的代碼。當開發進行到一定階段,可以直接拿去測試,不需要再有額外的工作來浪費時間。另外,你還可以知道,程序的某個Bug,是怎么出現的(被誰以及什么時候引入進來的)。備注:上述第1點轉自http://www.ydmsh.com/www/Blog/Show/id/147/
2.Git 是一個開源的分布式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。 Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。從版本庫的安全性上,Git在這方面完勝SVN。首先Git是分布式版本控制系統,每個用戶都相當於一份備份, 管理員無需為數據備份而擔心。再有Git中包括提交、文件內容等都通過SHA1哈希保證數據的完整性, 任何惡意篡改歷史數據都會被及時發現從而被挫敗。
對合並更好的支持,更少的沖突,更好的沖突解決,因為Git基於對內容的追蹤而非對文件名追蹤,所以遇到一方或雙方對文件名更改時, Git能夠很好進行自動合並或提供工具輔助合並。而SVN遇到同樣問題時會產生樹沖突, 解決起來很麻煩。Git的基於DAG(有向非環圖)的設計比SVN的線性提交提供更好的合並追蹤, 避免不必要的沖突,提高工作效率。