一、版本控制工具的作用和必要性
所謂版本控制系統(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高階之類的,能解決問題就好,理智看待這個問題。
鏈結時產生Map檔案作用和必要性
可以要求linker產生map檔案 例如gnu linker ld 的 m引數 雖然每套編譯工具產生map檔案格式可能都不一樣,但它的基本用途就是記錄專案中每乙個symbol之lma與vma的對應關係。這個map檔案很有用,我們可以從map檔案中得到下列資訊 程式各區段的定址是否正確 程式各區段的s...
grep的用法和引號的必要性
grep為查詢所指定的字串,當在乙個檔案中查詢所指定的字串時用以下方法 grep abc myfile 顯示當前登陸使用者名稱 方法1 echo logname 方法2 set grep log 由於涉及到了 的用法,接下來說說 的用法 標準變數 ps1 u h w user debian40ser...
交叉測試的必要性和遇到的問題
在軟體測試過程中,每個專案一般由多名測試工程師組成,分別負責不同模組的測試。對同乙個模組進行多輪測試,測試人員對手中的模組無論從整體到細節都有了非常深刻的掌握,但同時存在的定向思維,測試疲態也影響了bug的發現。這種測試模式不但影響了產品的最終質量,同時測試人員對產品整個邏輯和功能的了解也受到了限制...