第034章 版本控制系統(tǒng)
久違的陽光暫時將初冬的寒意擋在身后,蕭俊逸如往常一樣來到知春大廈,剛剛走出電梯,就聽到公司里嘈雜的爭吵聲,頓時皺起了眉頭。
“里面怎么回事?”蕭俊逸向坐在前臺的向玲問道。
“蕭總,我也不太清楚,好像是技術(shù)部那邊,說是硬盤壞了?!毕蛄岷幕卮稹?p> “硬盤壞了?一塊硬盤又不是什么大不了的事,不至于吵起來啊。難道是服務(wù)器的?”蕭俊逸一邊往里走一邊在琢磨。
技術(shù)部的辦公室里,大家看到蕭俊逸進(jìn)來,頓時間就安靜了下來,大家都耷拉著腦袋,像是在等待審判的犯人。
“說說吧,怎么回事?”蕭俊逸問道。
果然就如蕭俊逸猜測的那樣,服務(wù)器的硬盤掛了。按理說不應(yīng)該啊,周五下班前還好好的。
蕭俊逸給物業(yè)打了個電話才確定大廈的電路昨天出了點(diǎn)問題挑過幾次閘??赡芫褪且?yàn)檫@個原因?qū)е碌摹?p> 其實(shí)在接手公司的時候蕭俊逸就發(fā)現(xiàn)了服務(wù)器沒有配UPS(不間斷電源),只是習(xí)慣了前世穩(wěn)定的電網(wǎng)服務(wù),也沒在意,加上后來忙了起來把這個事給忘了。沒想到今天吃了個大虧。
蕭俊逸拆下硬盤,找了一家數(shù)據(jù)恢復(fù)公司,還好盤片沒有損壞,很順利的導(dǎo)出了數(shù)據(jù)。
問題算是解決了,虛驚一場。但是蕭俊逸心里卻在感慨,要是有Git就好了。
所謂Git,就是版本控制系統(tǒng)的一種。
而版本控制系統(tǒng),它能管理程序員對文件、目錄或工程等內(nèi)容的修改,方便查看歷次修改的記錄,同時還可以恢復(fù)到之前的任一次修改的版本,后來又實(shí)現(xiàn)了跨區(qū)域的多人協(xié)同開發(fā)。
整個版本控制系統(tǒng)的發(fā)展歷史可以分為本地版本控制系統(tǒng)、集中式版本控制系統(tǒng)以及分布式版本控制系統(tǒng)三個階段。
很早的時候,程序員習(xí)慣用復(fù)制整個項(xiàng)目目錄的方式來保存不同的版本,或許還會改名加上備份時間以示區(qū)別。盡管這么做很簡單,但是特別容易犯錯。有時候會弄混目錄,一不小心會改錯文件或者覆蓋掉意想之外的文件。
為了解決這個問題,有人就開發(fā)了本地版本控制系統(tǒng),采用簡單的數(shù)據(jù)庫來記錄文件的歷次更新差異,分別找回某次修改之前的文件。
隨著項(xiàng)目越來越大,已經(jīng)不是一個人就能完成的,那么如何讓多個開發(fā)者在一個項(xiàng)目上實(shí)現(xiàn)協(xié)同工作?
于是,集中式版本控制系統(tǒng)應(yīng)運(yùn)而生。其中最為出名的就是2000年誕生的SVN,直到蕭俊逸重生前還有無數(shù)的人和公司在使用這套系統(tǒng)。
而此時主流的還是迪克·格倫在1986年開發(fā)的CVS系統(tǒng)。
這種集中式版本控制系統(tǒng)將所有歷史數(shù)據(jù)都保存在一個單一的服務(wù)器里,開發(fā)人員通過客戶端連到這臺服務(wù)器,取出最新的文件或者提交更新。
蕭俊逸給自己公司部署的也是這個CVS系統(tǒng),只不過包括邱茂學(xué)在內(nèi)的國內(nèi)絕大多數(shù)程序員普遍習(xí)慣的還是單打獨(dú)斗,沒有什么團(tuán)隊(duì)開發(fā)的經(jīng)驗(yàn),對于版本控制系統(tǒng)還沒有完全適應(yīng),也沒有做好備份的工作。
至于蕭俊逸提到的Git,則屬于第三代,也就是分布式版本控制系統(tǒng)。在這類系統(tǒng)中,客戶端并不只提取最新版本的文件快照,而是把代碼完整地鏡像下來,包括完整的歷史記錄。
這么一來,任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,事后都可以用任何一個鏡像出來的本地倉庫恢復(fù)。
自從2005年Git誕生以后,憑借其功能完善,高度易用的特點(diǎn),迅速成為最流行的分布式版本控制系統(tǒng)。
到了2008年,為了給開源項(xiàng)目提供更好的存儲服務(wù),便把Git搬到了互聯(lián)網(wǎng)上,成立了GitHub網(wǎng)站,無數(shù)開源項(xiàng)目都遷移到了GitHub上,包括jQuery、PHP、Ruby等等。
盡管后來像阿里和騰訊這些大廠都推出了自己的基于Git的代碼托管平臺,只不過眾多的程序員早已經(jīng)習(xí)慣了Github。
蕭俊逸在想,是不是可以把這個Github提前搞出來,也算是不枉重生一回,為華夏的程序員們做點(diǎn)事。
說起Git的誕生,這里還有一段被全球程序員津津樂道的故事。
被稱為Linux之父的林納斯早些年的時候還真有點(diǎn)“缺心眼兒”,當(dāng)時市面上不是沒有版本控制系統(tǒng),只不過他“老人家”就是嫌麻煩不喜歡用,還在采用復(fù)制粘貼這樣的手工方式管理Linux的內(nèi)核源碼。
這時有一個收費(fèi)的分布式版本控制軟件BitKeeper,老板拉里和他也算老友了,最終說服了林納斯使用他們的系統(tǒng)來管理Linux的內(nèi)核源碼,并且有條件的免費(fèi)給他使用。
于是之后的三年里,Linux內(nèi)核開發(fā)團(tuán)隊(duì)一直使用BitKeeper來管理Linux源碼。
雖說BitKeeper在當(dāng)時算是個好用趁手的工具,但是因?yàn)锽itKeeper不是自由軟件,而是個商業(yè)軟件,這在 Linux 社區(qū)這種開放氛圍濃厚的地方屬于“大逆不道”的玩意兒。
于是有一個叫安德魯·垂鳩的小伙伴企圖破解這個軟件,這也導(dǎo)致了BitKeeper結(jié)束了和林納斯的合作,在大家都會以為林納斯會向BitKeeper低頭的時候,讓人意想不到的事情發(fā)生了,林納斯停下了十幾年從未中斷的Linux內(nèi)核維護(hù)工作,閉關(guān)擼代碼,只用了半個來月的時間就開發(fā)出來了Git。
從此Git正式走向舞臺,至于BitKeeper就比較慘了,市場急劇萎縮,直到2016年宣布開源了也鮮有人問津。
而這個時候Git幾乎成了分布式版本控制軟件的代名詞,差不多全世界所有的開發(fā)者在使用Git。
蕭俊逸雖然沒有林納斯那樣的水平,但是把一個使用了十幾年的程序抄出來還是沒有問題的。
只是自己沒有辦法像林納斯那樣完全拋開其它工作,心無旁騖的專心開發(fā),還是得需要找一些幫手,公司里的人現(xiàn)在都有各自的事情在忙,根本無暇分身。
蕭俊逸想到了周楓、王小川他們,雖然那次分享會之后,都還沒有見過面,但是沒少在郵件里聯(lián)系,對于他們幾個人目前的能力也有了一些了解,讓他們加入進(jìn)來,協(xié)助自己,對他們來說也是一次不錯的鍛煉。
只不過就算系統(tǒng)開發(fā)出來了,推廣卻是個問題,前世的時候市面上那么多分布式的版本控制系統(tǒng),為什么單單就Git火起來了,除開系統(tǒng)本身的優(yōu)點(diǎn)之外,林納斯的號召力起到的作用更大,所以最好還是能讓林納斯加入進(jìn)來,而馬克·埃文似乎可以做這個中間人。
當(dāng)然這些是下一步的事情,首要的還是得把Git開發(fā)出來,至于Github目前還沒有必要,當(dāng)前的互聯(lián)網(wǎng)環(huán)境還支撐不起這樣的網(wǎng)站。