關(guān)于版本控制
版本控制系統(tǒng)是一種記錄一個(gè)或若干文件內(nèi)容變化,以便將來(lái)查閱特定版本修訂情況的系統(tǒng)??蓪?duì)任何類型的文件進(jìn)行版本控制。
本地版本控制
本地版本控制系統(tǒng)通常用復(fù)制整個(gè)項(xiàng)目目錄的方式來(lái)保存不同的版本,或許還會(huì)加上備份時(shí)間以示區(qū)別。這樣做的唯一好處就是簡(jiǎn)單,但特別容易犯錯(cuò),有時(shí)會(huì)混淆所在的工作目錄,一不小心會(huì)寫錯(cuò)文件或覆蓋意想之外的文件。
本地版本控制系統(tǒng)大多都是采用某種簡(jiǎn)單的數(shù)據(jù)庫(kù)來(lái)記錄文件的歷次更新差異。

其中最流行的一種叫做RCS(Real-time Control System - Wikipedia ),它的工作原理是在在硬盤上保存補(bǔ)丁集(補(bǔ)丁是指文件修訂前后的變換);通過(guò)應(yīng)用所有的補(bǔ)丁,可以重新計(jì)算出各個(gè)版本的文件內(nèi)容。
集中化的版本控制系統(tǒng)
集中化的版本控制系統(tǒng)(Centralized Version Control System,簡(jiǎn)稱CVCS)主要為解決在不同系統(tǒng)上的開(kāi)發(fā)者協(xié)同工作問(wèn)題,,諸如CVS、Subversion以及Perforce等,都有一個(gè)單一的集中管理的服務(wù)器,保存所有文件的修訂版本,而協(xié)同工作的人們通過(guò)客戶端連到這臺(tái)服務(wù)器,取出最新的文件或提交更新。

這種做法的好處是相教于老式的本地VCS來(lái)說(shuō),現(xiàn)在每個(gè)人都可以在一定程度上看到項(xiàng)目中的其他人正在做什么。而管理員也可以輕松掌控每個(gè)開(kāi)發(fā)者的權(quán)限,并且管理一個(gè)CVCS要遠(yuǎn)比在各個(gè)客戶端上維護(hù)本地?cái)?shù)據(jù)庫(kù)來(lái)得輕松容易。但是這么做顯而易見(jiàn)的缺點(diǎn)是中央服務(wù)器的單點(diǎn)故障。如果宕機(jī)一小時(shí),那么在這個(gè)小時(shí)內(nèi),誰(shuí)也無(wú)法提交更新,也就無(wú)法協(xié)同工作。如果中心數(shù)據(jù)庫(kù)所在的磁盤發(fā)生損壞,又沒(méi)有做恰當(dāng)備份,毫無(wú)疑問(wèn)你將丟失所有數(shù)據(jù)——包括項(xiàng)目的真?zhèn)€變更歷史,只剩下人們?cè)诟髯詸C(jī)器上保留的單獨(dú)快照。本地版本控制也有類似問(wèn)題,只要整個(gè)項(xiàng)目的歷史記錄被保存在單一位置,就有丟失所有歷史更新記錄的風(fēng)險(xiǎn)。
分布式版本控制系統(tǒng)
分布式版本控制系統(tǒng)(Distributed Version Control System,簡(jiǎn)稱DVCS),在這類系統(tǒng)中,向Git、Mercurial、Bazaar以及Darcs等,客戶端并不只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整地鏡像下來(lái)。這樣一來(lái),任何一處協(xié)同工作的服務(wù)器發(fā)生故障,事后都可以用任何一個(gè)鏡像出來(lái)的本地倉(cāng)庫(kù)恢復(fù)。因?yàn)槊恳淮蔚目寺〔僮?,?shí)際上都是一次對(duì)代碼倉(cāng)庫(kù)的完整備份。

更進(jìn)一步,許多這類系統(tǒng)都可以指定和若干不同的遠(yuǎn)端代碼倉(cāng)庫(kù)進(jìn)行交互。籍此,你就可以在同一個(gè)項(xiàng)目中,分別和不同小組的人相互協(xié)作。可以根據(jù)需要設(shè)定不同的協(xié)作流程,比如層次模型式的工作流,而這在以前的集中式系統(tǒng)中是無(wú)法實(shí)現(xiàn)的。