Git是目前世界上最為炙手可熱的版本控制系統(tǒng)。它是如此的流行和重要,以至于全世界程序員的工作和生活,都可能因之而改變。
Git是一個(gè)版本控制系統(tǒng),幫助程序員管理自己的源代碼的版本變化,保證它們不會(huì)丟失。它只是開(kāi)發(fā)工作中的一個(gè)工具。但是,一個(gè)“工具”,為什么可以重要到足以改變這個(gè)“工作”本身?我們可以以政治經(jīng)濟(jì)學(xué)范疇的概念,來(lái)理解一下這個(gè)問(wèn)題,Git就相當(dāng)于是生產(chǎn)工具,生產(chǎn)工具的發(fā)展,可以進(jìn)一步解放生產(chǎn)力,從而推動(dòng)了社會(huì)的進(jìn)步。Git不是歷史上第一個(gè)版本控制工具,顯然也不會(huì)是最后一個(gè),為什么到了Git出現(xiàn)的時(shí)候,就產(chǎn)生了近乎變革般的變化?
Git是一個(gè)“分布式”版本控制系統(tǒng),在這一段,我們更強(qiáng)調(diào)它的分布式特性。整個(gè)系統(tǒng)中,每一個(gè)節(jié)點(diǎn),都擁有整個(gè)版本庫(kù)的拷貝,每個(gè)節(jié)點(diǎn),都具備全部的信息,整體上是去中心化的。每一個(gè)加入到系統(tǒng)的節(jié)點(diǎn),通過(guò)克隆其中某個(gè)節(jié)點(diǎn)的內(nèi)容,成為一個(gè)獨(dú)立的版本庫(kù),并在此基礎(chǔ)上可以自行發(fā)展,甚至重新以自我為中心,傳播和擴(kuò)散。整個(gè)系統(tǒng)的設(shè)計(jì),極大地鼓勵(lì)了拷貝和分化。帶給人的感覺(jué),就好像原子彈爆炸的鏈?zhǔn)椒磻?yīng)一樣,一個(gè)項(xiàng)目,通過(guò)使用Git開(kāi)源,就有可能擦出其他人的火花,一個(gè)火花可以擦出更多火花,最后形成代碼實(shí)現(xiàn)的爆炸式增長(zhǎng)。
Git另一些帶來(lái)變革的原因,我想,首先是社區(qū),從來(lái)沒(méi)有一個(gè)開(kāi)源社區(qū),像GitHub一樣,提供了如此良好的氛圍,不光是氛圍,還有方法,約定,禮貌。這個(gè)社區(qū)鼓勵(lì)開(kāi)源,如果開(kāi)源,將得到社區(qū)運(yùn)營(yíng)者免費(fèi)的代碼托管服務(wù)。這個(gè)社區(qū)鼓勵(lì)創(chuàng)造,為每個(gè)項(xiàng)目提供了最顯眼的fork功能,以及pull request功能,前者是復(fù)制、是索取,后者是改進(jìn)、是回饋。
除此以外,還有什么?莫非是其創(chuàng)造者Linus個(gè)人的精神領(lǐng)袖氣質(zhì)么?這只是個(gè)玩笑~
Git不是GitHub,雖然它們密不可分,但是不要將它們混為一談,很多不明所以的初學(xué)者,學(xué)習(xí)Git的所有知識(shí),可能都來(lái)自GitHub,所以,自然而然就把它們混淆了,雖然,這種混淆也不影響大局,但是,搞清楚它們,仍然是有好處的。
Git不是SVN,雖然都是版本控制系統(tǒng),Git和SVN有著最為本質(zhì)的不同,前者是分布式的,而后者是集中式的,Git的學(xué)習(xí)成本,就個(gè)人體驗(yàn)來(lái)看,遠(yuǎn)遠(yuǎn)超過(guò)SVN,所以,一時(shí)半會(huì)兒搞不清楚,絕對(duì)是正常的事情,也沒(méi)必要急躁,切忌的是,不要用SVN去理解Git,那就時(shí)常會(huì)大錯(cuò)特錯(cuò)。
Git不僅僅是工具,還包括與Git密切相關(guān)的方法論,或者說(shuō)工作流程,它們有很多形式和種類,每一種都有特定的場(chǎng)景,或者適用于特定的團(tuán)隊(duì)管理,或者特定項(xiàng)目的開(kāi)發(fā),甚至,也非常鼓勵(lì)每個(gè)團(tuán)隊(duì)發(fā)展自己的工作流。
Git不會(huì)阻止任何形式的誤用和濫用,所以,在這個(gè)時(shí)候,我們就更強(qiáng)調(diào)契約精神和理解其原理的鉆研精神。雖然,就這一點(diǎn)來(lái)看,是我個(gè)人及其討厭的,但是,如果想讓它在團(tuán)隊(duì)工作中發(fā)揮更大的作用,大家不得不去適應(yīng)這一點(diǎn)。
最后,你可以批評(píng)它,討厭它,但是我建議,在此之前,你應(yīng)先學(xué)會(huì)它。