什么是版本控制?
版本控制是一種記錄了一個(gè)或若干個(gè)文件內(nèi)容的變化哭靖,以便將來可以隨時(shí)查看特定版本的信息或者恢復(fù)到某個(gè)特定版本的系統(tǒng)练对。
版本系統(tǒng)的種類
本地版本系統(tǒng)
人們?yōu)榱朔奖阌涗浳募淖兓约翱梢约皶r(shí)恢復(fù)到文件之前的某個(gè)狀態(tài),于是携龟,出現(xiàn)了本地版本系統(tǒng)验毡。
本地版本控制的系統(tǒng)有很多衡创,最為流行的為RCS(Revision Control System)。大多數(shù)的本地版本控制系統(tǒng)都是采用某種簡(jiǎn)單的數(shù)據(jù)庫(kù)來記錄文件的歷史差異晶通,就如同上圖所表示的璃氢。
集中化的版本控制系統(tǒng)
緊接著人們又遇到了問題,如何讓在不同系統(tǒng)上的開發(fā)者協(xié)同工作呢录择?因此拔莱,集中化的版本控制系統(tǒng)CVCS(Centralized VCS)應(yīng)運(yùn)而生。這類系統(tǒng)隘竭,比如CVS、Subversion等讼渊,都有一個(gè)單一的集中管理的服務(wù)器动看,保存所有的修訂版本,而協(xié)同工作的開發(fā)者都通過客戶端連接到這臺(tái)服務(wù)器爪幻,獲取最新的文件或者提交更新菱皆。多年一來,這已經(jīng)成為版本控制系統(tǒng)的標(biāo)準(zhǔn)做法挨稿。
這種做法帶來了許多好處仇轻,特別是相對(duì)于老式的本地VCS來說。現(xiàn)在奶甘,每個(gè)人都可以在一定程度上看到其他人在做些什么篷店。而管理員也可以方便的管理每個(gè)開發(fā)者的權(quán)限,并且管理一個(gè)CVCS要遠(yuǎn)比在各個(gè)客戶端維護(hù)本地?cái)?shù)據(jù)庫(kù)要容易的多。
但是疲陕,事情都是有兩面性的方淤。最顯著的問題就是服務(wù)器的單點(diǎn)故障。假設(shè)服務(wù)器宕機(jī)一小時(shí)蹄殃,所有人都不能提交更新了携茂,那么就不能協(xié)調(diào)工作了。如果服務(wù)器的硬盤出現(xiàn)損壞诅岩,那么所有的歷史版本都會(huì)消失讳苦,只剩下各個(gè)客戶端本機(jī)上的版本。
分布式版本控制系統(tǒng)
于是吩谦,分布式版本控制系統(tǒng)DVCS(Distributed VCS)面世了鸳谜。在這類系統(tǒng)中,像Git逮京、Mercurial等卿堂,客戶端并不獲取最新版本的文件快照,而是把整個(gè)代碼倉(cāng)庫(kù)完整的鏡像下來懒棉。這樣一來草描,任何一處協(xié)同工作用的服務(wù)器出現(xiàn)故障,事后都可以用任何鏡像出來的本地倉(cāng)庫(kù)恢復(fù)策严。因?yàn)槊恳淮慰寺〔僮魉肽健?shí)際上都是對(duì)代碼倉(cāng)庫(kù)的完整拷貝。