版本控制

版本控制
1.定義
版本控制(Revision control)是一種軟體工程技巧,籍以在開發的過程當中,確保由不一樣人所編輯的同一檔案都獲得更新。git

2.原理
版本控制透過文檔控制(documentation control)記錄程序各個模組的改動,併爲每次改動編上序號。這種方法是工程圖(engineering drawings)維護(maintenance)的標準作法, 它伴隨着工程圖從圖的誕生一直到圖的定型。 一種簡單的版本控制形式,例如,賦給圖的第一版一個版本等級「A」。當作了第一次改變後,版本等級改成「B」,以此類推等等。
3.特徵
1.軟件系統的版本控制是指能夠自行運行的各子系統的版本控制。
2.軟件系統的版本號由評測小組的人員肯定,由評測小組進行版本控制工做。
3.軟件系統的版本號由3部分構成,即主版本號+次版本號+修改號。主版本號1位,只有當系統在結構和功能上有重大突破改進後才發生變化;次版本號有2位;修改號8位,採用提交時的日期,當系統進行任何修改後,包括數據庫結構發生變化,修改號都要隨之改變。例如:Ver3.31.19990317
4.各子系統的版本號獨立。
5.各軟件系統應該有顯示詳細版本號的功能。例如help菜單下的about功能。系統提交存檔時,評測服務部要進行版本號檢查。
6.新系統開發完成、或已存檔的系統進行修改,修改完成後,進行提交存檔時,由評測評測小組系統分析工程師肯定新版本號、或更改版本號。
7.軟件系統,產生新的版本後,老版本的軟件系統是否繼續保存,取決於如下條件:
a.老版本的系統若是有客戶還在使用,在客戶升級之前,必須繼續保存。
b.老版本的系統已經沒有客戶使用了,而且新版本的系統已經把老系統的文檔完整地升級過來,這樣能夠刪除或覆蓋老版本的系統資源。
c.對於要刪除或覆蓋的老版本系統,能夠統一備份起來。
4.經常使用的版本控制優缺點
VSS
Visual SourceSafe:微軟的版本控制工具,僅支持Windows操做系統。雖然簡單好用,可是僅適用於團隊級開發,不能勝任企業級的開發工做。
VSS優勢:安裝、配置、使用均較簡單,很容易上手使用;操做簡單,容易掌握;權限劃分可到文件夾級,有Read、Check-Out & Check-In、Add/Rename/Delete、Destroy四種權限級別。
缺點:權限管理基於文件共享形式,只能從文件夾共享的權限設定對整個庫文件夾的權限,並且必需要有可寫權限;版本管理和分支管理只能靠人爲的手工設置;版本發行時,只能手工挑選對應的版本文件進行發佈;安全性不高,基於文件系統共享實現對服務器的訪問,須要共享存儲目錄,這樣用戶能夠對VSS的文件夾執行刪除操做。
CVS
CVS是一個典型的服務器/客戶端軟件,有Unix版本的CVS 、Linux版本的CVS和Windows版本的CVS。CVS支持遠程管理,項目組分佈開發時通常都採用CVS。安裝、配置較複雜,但使用比較簡單,只需對配置管理作簡單培訓便可。安全性高,CVS服務器有本身專用的數據庫,文件存儲並不採用 「共享目錄」方式,因此不受限於局域網。CVS能夠跨平臺,支持併發版本控制,並且免費。CVS不支持文件更名,只針對文件控制版本而沒有針對目錄的管理,而且缺乏相應的技術支持,許多問題的解決須要自已尋找資料,甚至是研究源代碼。但也能夠根據本身的須要進行編程。
相對功能單1、簡陋,適用於幾我的的小型團隊,在數據量不大的狀況下,性能能夠接受。
SVN
SVN(Subversion) 是一種版本管理系統,其前身是CVS。SVN是根據CVS 的功能爲基礎來設計的,它除包括了CVS 的大多數特色外,還有一些新的功能,如:文件目錄能夠方便的更名、基於數據庫的版本庫、操做速度提高、權限管理更完善等。
CVS與SVN比較
比較項目 CVS SVN
權限控制 是否依賴系統賬號 依賴 不依賴
能否對分支受權 否 是
是否支持LDAP認證 否 是
圖形化賬號管理 否 是(集中管理平臺)
用戶能否獲取忘記口令,修改口令 否 是(集中管理平臺)
目錄,文件名變動 否 是
分支

管理 建立分支時間 耗時* 快
分支可見、查詢 難 易
二進制文件 二進制優化 否 是
二進制文件標識 手工 自動
二進制文件(圖形文件)被破壞 易破壞 不易破壞
事物

處理 原子提交 否 是
修改提交說明 單個文件 是
換行

符 能否指定換行符類型 否 是
檢查換行符設定,避免跨平臺開發帶來的混亂 否 是
功能擴展 CVSROOT hooks 腳本
網絡

帶寬 網絡帶寬佔用 高 低
脫機命令 否 部分
ClearCase(閉源集中式)
ClearCase提供了全面的配置管理——包括版本控制、工做空間管理、創建管理和過程控制,並且無須軟件開發者改變他們現有的環境、工具和工做方式。
ClearCase包括兩套:ClearCase LT和ClearCase (MultiSite)。前者能夠用於在同一個局域網的開發小組,適合於中小型開發組織;ClearCase (MultiSite)則適應於分佈於不一樣地理位置、不一樣局域網的開發小組,適合於大型的開發組織。
優點:
增長團隊效率――經過對並行開發的支持來實現,包括圖形比較和歸併、標籤、版本目錄結構。
增長我的效率 ――經過自動的工做空間管理來實現,如:直接的版本訪問、消除了在拷貝文件上的時間的浪費。
簡單的維護和提升對客戶的支持――經過快速準確的重建先前的版原本實現。
快速準確的產品發佈 ――經過保證構造的準確性和對軟件的每個元件進行版本控制來實現。
減小錯誤發生 ――經過事件發生之後對每個元件的變動進行追蹤來實現。
硬件資源的優化 ――經過分佈式構造、減小文件拷貝、可用對象的共享等功能來實現。
提升項目協調和編制 ――經過文件註釋和開發週期階段變動的自動關聯來實現。
提升產品質量 ――經過靈活的進程控制,和圖形接口定製,使得軟件開發在實際中保持一致。
更加有效的團隊擴展――經過減小系統管理和維護的負擔來實現。
支持分佈式結構使得團隊成長――經過Client/Server結構進行多點複製和及時的對象版本的更新來實現。
使用配置管理工具而下降風險――因爲它不干擾軟件程序員的工做,因此可使用經常使用的工具和文件系統接口。
增長了軟件的安全性和保護性 ――經過使用分佈式的存儲結構,全部的軟件資源會隨時更新、在硬盤或網絡出現錯誤時那些被ClearCase存儲的版本信息會馬上恢復。
減小培訓和實現成本 ――ClearCase經過採用透明結構以及和標準開發工具進行集成來實現。
強有力的開發和維護 ――經過和其它工具(如:缺陷追蹤)、系統、結構進行集成。
支持不一樣種類的開發 ――經過兼容不一樣平臺的軟件配置管理系統,如:Windows NT、UNIX、和一些Client端的軟件,如:Windows 9五、Windows NT、Windows 3.1和Windows for Workgroups。
缺點:ClearCase 太貴,易用性差,培訓費用很貴,沒有培訓,很難上手使用。
StarTeam(閉源集中式)
StarTeam屬於高端的工具,在易用性,功能和安全性等方面都很不錯。 StarTeam的用戶界面同VSS的相似,它的全部的操做均可經過圖形用戶界面來完成,同時,對於習慣使用命令方式的用戶,StarTeam也提供命令集進行支持。並且StarTeam的隨機文檔也很是詳細。 StarTeam還提供了流程定製的工具,用戶可跟據本身的需求靈活的定製流程。與VSS和CVS不一樣,VSS和CVS是基於文件系統的配置管理工具,而StarTeam是基於數據庫的。StarTeam的用戶可根據項目的規模,選取多種數據庫系統。StarTeam無需經過物理路徑的權限設置,而是經過本身的數據庫管理,實現了相似Windowsnt的域用戶管理和目錄文件ACL控制。StarTeam徹底是域獨立的。這個優點能夠爲用戶模型提供靈活性,而不會影響到現有的安全設置。StarTeam的訪問控制很是靈活而且系統。您能夠對工程、視圖、文件夾一直向下到每個小的item設置權限。對於高級別的視圖(view),訪問控制能夠與用戶組、用戶、項目甚至視圖等連接起來。 StarTeam是按license來收費的,比起VSS,CVS來,企業在啓動StarTeam進行配置管理須要投入必定資金。
優勢:權限設置功能強大方便。StarTeam的圖形化界面,可以使初學者易於接收,並且其缺陷控制功能的功能(基於數據庫的Change Request),是相應工具中獨樹一幟的。
缺點:不支持並行開發,不能很好解決Merge的問題;不支持分支的自動合併,須要手動來處理;速度慢,必定程度上影響開發效率;故障恢復困難,須要有專職管理員維護;沒有中文版本;另外,StarTeam集成度較高,移植過程複雜,須要的管理負擔大,須要完善的備份計劃。
GIT(開源分佈式)
GIT 是一款免費的、開源的、分佈式的版本控制系統。旨在快速高效地處理不管規模大小的任何軟件工程。與經常使用的版本控制工具 CVS, Subversion 等不一樣,它採用了分佈式版本庫的方式,沒必要服務器端軟件支持,使源代碼的發佈和交流極其方便。每個GIT克隆都是一個完整的文件庫,含有所有歷史記錄和修訂追蹤能力。其最大特點就是「分支」及「合併」操做快速、簡便。支持離線工做,GIT是整個項目範圍的原子提交,並且GIT中的每一個工做樹都包含一個具備完整項目歷史的倉庫。
GIT 原本是面向 Linux 操做系統開發的軟件。在 Linux 平臺上使用GIT很是簡單,都是命令行模式。但對windows以及中文的支持不是很好。
Mercurial(開源分佈式)
Mercurial 是一種輕量級分佈式版本控制系統,採用 Python 語言實現,易於學習和使用,擴展性強。其是基於 GNU General Public License (GPL) 受權的開源項目。
相對於傳統的版本控制,具備以下優勢:
更輕鬆的管理。傳統的版本控制系統使用集中式的repOSItory,一些和repository相關的管理就只能由管理員一我的進行。因爲採用了分佈式的模型,Mercurial 中就沒有這樣的困擾,每一個用戶管理本身的repository,管理員只需協調同步這些repository。
更健壯的系統。分佈式系統比集中式的單服務器系統更健壯,單服務器系統一旦服務器出現問題整個系統就不能運行了,分佈式系統一般不會由於一兩個節點而受到影響。
對網絡的依賴性更低。因爲同步能夠放在任意時刻進行,Mercurial 甚至能夠離線進行管理,只需在有網絡鏈接時同步。
簡單易學、易於使用;輕量級,運行快速;可擴展性,易於根據用戶需求自行定義、擴展。
Monotone(開源分佈式)
Monotone是一個免費的分佈式版本管理系統。提供了簡單的文件事務版本存儲,可離線操做,高效的點對點同步協議,支持歷史版本敏感的合併操做、輕量級分支處理以及集成代碼評審和第三方測試工具。使用加密的版本命令方式和客戶端 RSA 認證,很好的支持國際化,不依賴第三方工具,支持跨平臺。 可運行在Linux,Solaris,Mac OSX,Windows和其餘Unixes上,遵循GPL協議。
5.SVN和GIT的區別
(1)SVN
SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,相較於RCS、CVS,它採用了分支管理系統,它的設計目標就是取代CVS。互聯網上不少版本控制服務已從CVS遷移到Subversion。說得簡單一點SVN就是用於多我的共同開發同一個項目,共用資源的目的。
(2)GIT
git是一款免費、開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。
Git是一個開源的分佈式版本控制系統,能夠有效、高速的處理從很小到很是大的項目版本管理。[2] Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。
(3) 區別
1.GIT是分佈式的,SVN不是:
這是GIT和其它非分佈式的版本控制系統,例如SVN,CVS等,最核心的區別。若是你能理解這個概念,那麼你就已經上手一半了。須要作一點聲明,GIT並非目前第一個或惟一的分佈式版本控制系統。還有一些系統,例如Bitkeeper, Mercurial等,也是運行在分佈式模式上的。但GIT在這方面作的更好,並且有更多強大的功能特徵。
GIT跟SVN同樣有本身的集中式版本庫或服務器。但,GIT更傾向於被使用於分佈式模式,也就是每一個開發人員從中心版本庫/服務器上chect out代碼後會在本身的機器上克隆一個本身的版本庫。能夠這樣說,若是你被困在一個不能鏈接網絡的地方時,就像在飛機上,地下室,電梯裏等,你仍然可以提交文件,查看歷史版本記錄,建立項目分支,等。對一些人來講,這好像沒多大用處,但當你忽然遇到沒有網絡的環境時,這個將解決你的大麻煩。
一樣,這種分佈式的操做模式對於開源軟件社區的開發來講也是個巨大的恩賜,你沒必要再像之前那樣作出補丁包,經過email方式發送出去,你只須要建立一個分支,向項目團隊發送一個推請求。這能讓你的代碼保持最新,並且不會在傳輸過程當中丟失。GitHub.com就是一個這樣的優秀案例。
有些謠言傳出來講subversion未來的版本也會基於分佈式模式。但至少目前還看不出來。
2.GIT把內容按元數據方式存儲,而SVN是按文件:
全部的資源控制系統都是把文件的元信息隱藏在一個相似.svn,.cvs等的文件夾裏。若是你把.git目錄的體積大小跟.svn比較,你會發現它們差距很大。由於,.git目錄是處於你的機器上的一個克隆版的版本庫,它擁有中心版本庫上全部的東西,例如標籤,分支,版本記錄等。
3.GIT分支和SVN的分支不一樣:
分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。若是你想知道是否合併了一個分支,你須要手工運行像這樣的命令svn propget svn:mergeinfo,來確認代碼是否被合併。感謝Ben同窗指出這個特徵。因此,常常會發生有些分支被遺漏的狀況。
然而,處理GIT的分支倒是至關的簡單和有趣。你能夠從同一個工做目錄下快速的在幾個分支間切換。你很容易發現未被合併的分支,你能簡單而快捷的合併這些文件。
4.GIT沒有一個全局的版本號,而SVN有:
目前爲止這是跟SVN相比GIT缺乏的最大的一個特徵。你也知道,SVN的版本號實際是任何一個相應時間的源代碼快照。我認爲它是從CVS進化到SVN的最大的一個突破。由於GIT和SVN從概念上就不一樣,我不知道GIT裏是什麼特徵與之對應。若是你有任何的線索,請在評論裏奉獻出來與你們共享。
更新:有些讀者指出,咱們可使用GIT的SHA-1來惟一的標識一個代碼快照。這個並不能徹底的代替SVN裏容易閱讀的數字版本號。但,用途應該是相同的。
5.GIT的內容完整性要優於SVN:
GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時下降對版本庫的破壞。程序員

相關文章
相關標籤/搜索