一、版本控制
目錄:淺談發(fā)展歷史、什么是版本控制、常見版本控制工具、版本控制的分類
1.淺談發(fā)展歷史
同生活中的許多偉大事物一樣,Git誕生于一個極富紛爭大舉創(chuàng)新的年代。
Linux內(nèi)核開源項目有著為數(shù)眾廣的參與者。 絕大多數(shù)的Linux內(nèi)核維護工作都花在了提交補丁和保存歸檔的繁瑣事務(wù)上(1991-2002年間)。 到2002年,整個項目組開始啟用一個專有的分布式版本控制系統(tǒng)BitKeeper來管理和維護代碼。
到了2005年,開發(fā)BitKeeper的商業(yè)公司同Linux內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束,他們收回了Linux內(nèi)核社區(qū)免費使用BitKeeper的權(quán)力。 這就迫使Linux開源社區(qū)(特別是Linux的締造者Linus Torvalds)基于使用BitKeeper時的經(jīng)驗教訓(xùn),開發(fā)出自己的版本系統(tǒng)。 也就是后來的Git。
Git是目前世界上最先進的分布式版本控制系統(tǒng)。
Git是免費的、開源的,最初Git是為輔助Linux內(nèi)核開發(fā)的,用來替代BitKeeper。
2.什么是版本控制
版本控制(Revision control)是一種在開發(fā)的過程中用于管理我們對文件、目錄或工程等內(nèi)容的修改歷史,方便查看更改歷史記錄,備份以便恢復(fù)以前的版本的軟件工程技術(shù)。
- 實現(xiàn)跨區(qū)域多人協(xié)同開發(fā)
- 追蹤和記載一個或者多個文件的歷史記錄
- 組織和保護你的源代碼和文檔
- 統(tǒng)計工作量
- 并行開發(fā)、提高開發(fā)效率
- 跟蹤記錄整個軟件的開發(fā)過程
- 減輕開發(fā)人員的負擔(dān),節(jié)省時間,同時降低人為錯誤
簡單說就是用于管理多人協(xié)同開發(fā)項目的技術(shù)。
沒有進行版本控制或者版本控制本身缺乏正確的流程管理,在軟件開發(fā)過程中將會引入很多問題,如軟件代碼的一致性、軟件內(nèi)容的冗余、軟件過程的事物性、軟件開發(fā)過程中的并發(fā)性、軟件源代碼的安全性,以及軟件的整合等問題。
3.常見版本控制工具
主流的版本控制器有如下這些:
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
- Visual Studio Online
版本控制產(chǎn)品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),現(xiàn)在影響力最大且使用最廣泛的是Git與SVN。
Git與SVN最主要的區(qū)別:
SVN是集中式版本控制系統(tǒng),版本庫是集中放在中央服務(wù)器的。然而編寫代碼的時候,使用的是自己的電腦,所以首先要從中央服務(wù)器得到最新的版本,然后再編寫代碼。完成工作后,需要把自己編寫的代碼推送到中央服務(wù)器。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作,對網(wǎng)絡(luò)帶寬要求較高。
Git是分布式版本控制系統(tǒng),沒有中央服務(wù)器,每個人的電腦就是一個完整的版本庫。編寫代碼的時候不需要聯(lián)網(wǎng)了,因為版本都在自己電腦上。協(xié)同的方法是這樣的:比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。
Git是目前世界上最先進的分布式版本控制系統(tǒng)。
4.版本控制的分類
1)本地版本控制
記錄文件每次的更新,可以對每個版本做一個快照,或是記錄補丁文件,適合個人用,如RCS。

2)集中版本控制
所有的版本數(shù)據(jù)都保存在服務(wù)器上,協(xié)同開發(fā)者從服務(wù)器上同步更新或上傳自己的修改。

所有的版本數(shù)據(jù)都存在服務(wù)器上,用戶的本地只有自己以前所同步的版本,如果不連網(wǎng)的話,用戶就看不到歷史版本,也無法切換版本驗證問題,或在不同分支工作。而且,所有數(shù)據(jù)都保存在單一的服務(wù)器上,有很大的風(fēng)險這個服務(wù)器會損壞,這樣就會丟失所有的數(shù)據(jù),當(dāng)然可以定期備份。代表產(chǎn)品:SVN、CVS、VSS。
3)分布式版本控制
所有版本信息倉庫全部同步到本地的每個用戶,這樣就可以在本地查看所有版本歷史,可以離線在本地提交,只需在連網(wǎng)時push到相應(yīng)的服務(wù)器或其他用戶那里。由于每個用戶那里保存的都是所有的版本數(shù)據(jù),只要有一個用戶的設(shè)備沒有問題就可以恢復(fù)所有的數(shù)據(jù),但這增加了本地存儲空間的占用。
