這是我們開始學習 Git 的第一節(jié)課,主要帶大家初識 Git。本節(jié)課會從 Git 的誕生、以及 Git 是什么、Git 能做什么這幾個方面進行一個簡單的介紹,讓大家對 Git 有一個初步的了解,為以后的課程做一個鋪墊。好了,讓我們開始走進 Git 的世界!
1. Git 的前世今生
我們學一樣技術(shù)或者一種工具,剛開始最好先了解一下它的來龍去脈。雖然無關(guān)使用,但通過它背后的故事可能會激發(fā)起我們學習它的濃厚興趣,從這一點來講還是有實際意義的。
提起 Git,就不得不提起 Linus 和他的 Linux。計算機相關(guān)從業(yè)者大多都知道,linus 創(chuàng)建了 Linux 系統(tǒng),但是 Linux 系統(tǒng)并不是由 Linus 一個人完成的,它依賴于廣大的開發(fā)者源源不斷的貢獻代碼來共同開發(fā)維護。那么問題來了,這么多人來共同維護一個系統(tǒng),當時大家是怎樣來保持高效的協(xié)作呢?這么多人提交代碼,是怎么保證代碼不沖突呢?你可能會想到使用過的一些版本控制系統(tǒng),不過可能要讓你失望了,雖然當時有很多版本控制系統(tǒng)像 CVS、SVN 等,但是都被 linus 舍棄了,因為這些集中式的版本控制系統(tǒng)需要聯(lián)網(wǎng),而且速度很受影響。所以,很長一段時間內(nèi),都是靠 linus 來自己手工合并的(默默送上大拇指)。
但是,Linux 系統(tǒng)越來越龐大,這么下去不是個問題。直到 2002 年左右,BitMover 公司將他們的商業(yè)的版本控制系統(tǒng) BitKeeper 給 Linux 社區(qū)免費使用,這下大家的工作量稍微減輕了些。但是好景不長,社區(qū)牛人聚集,還沒一兩個手腳亂動的?有人試圖破解 BitKeeper 的協(xié)議,但是被 BitMover 公司發(fā)現(xiàn)了,于是乎 BitMover 公司一怒之下收回了他們的使用權(quán)。
本來單車變摩托,現(xiàn)在又騎單車了。不過,Linus 就是 Linus,怎么可能重走舊路呢,畢竟合并代碼手很疼。痛定思痛,沒花多久自己用 C 開發(fā)了一套分布式版本管理系統(tǒng),沒錯就是 Git!
后來 Git 越來越流行,比如程序員大型交友網(wǎng)站 Github 使用的就是 Git 存儲。
2. Git 是什么
我們先來看下官方解釋:
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Git is_ easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.
簡單給大家翻譯下,它的意思是說:
Git 是一個免費的開源分布式版本控制系統(tǒng),旨在快速高效地處理從小型到大型項目的所有內(nèi)容。
Git 易于學習,且性能出眾。 它的本地分支,方便的暫存區(qū)域和多個工作流等功能,其性能優(yōu)于 Subversion,CVS,Perforce 和 ClearCase 等 SCM 工具。
其實,翻譯過來還是有點晦澀難懂。其中一些概念對于新手來說很難真正理解。別著急,我挑其中的重點概念來給大家具體講解下。
2.1 分布式版本控制系統(tǒng)
分布式版本控制系統(tǒng)是相對于集中式版本控制系統(tǒng)來說的。
集中式版本控制系統(tǒng)首先需要聯(lián)網(wǎng),提交文件速度依賴于網(wǎng)絡帶寬。而且,集中式版本控制系統(tǒng)的版本庫是集中存放在中央服務器的,每個人提交內(nèi)容的時候,需要先提交到中央服務器,然后再從中央服務器拉取別人的修改到自己的本地。
分布式版本控制系統(tǒng)沒有中央服務器,每個人本地都是一個完整的版本庫,所以也不依賴網(wǎng)絡。多個人在自己本機修改同一個文件后,只需把各自的修改推送給對方,就可以互相看到對方的修改了。
基于以上特點可以看出,分布式版本控制系統(tǒng)的安全性比集中式版本控制系統(tǒng)高。因為每個人電腦里都有完整的版本庫,你電腦宕機丟失本地修改后,隨便從其他人那里復制一個就可以了。而集中式版本控制系統(tǒng)的中央服務器要是出了問題,那就很難恢復了。
2.2 分支
分支,可以先簡單理解成就是一條時間線,對于給 A 老板的文檔,每個人每一次提交修改過程都是這條時間線上的一個節(jié)點,這些節(jié)點共同串成了一條時間線,也就是一個分支。同樣,你可以創(chuàng)建一個 B 分支,在 B 分支上進行另一個版本的修改提交。
關(guān)于分支的理論與具體操作,我們在后續(xù)詳細說明。
2.3 快照
Git 與任何其他 VCS 之間的主要區(qū)別在于對數(shù)據(jù)的處理方式。
大多數(shù)其他版本控制系統(tǒng)將信息存儲為基于文件的更改的列表。這些其他系統(tǒng)保存的是對每個文件所做的更改(通常稱為基于增量的版本控制)。如下圖,每個版本記錄的是文件發(fā)生的改變。
而 Git 每次提交或保存項目狀態(tài)時,基本上都會拍下當時所有文件的圖片,并存儲對該快照的引用。為了提高效率,如果文件沒有更改,Git 不會再次存儲該文件,而只是指向它已經(jīng)存儲的先前相同文件的鏈接。Git 更像是一堆快照來處理數(shù)據(jù)。如下圖,每個版本記錄的是文件完整的信息。
3. Git 能干什么
舉個例子,你和多個同事需要寫作完成一個 word 文檔,每個同事負責其中一部分,那么怎么進行協(xié)作編寫呢?可能會是各自寫完自己的模塊后由某個人進行手工整理成你們需要的內(nèi)容。但這樣其實很不方便,所以版本控制系統(tǒng)出現(xiàn)了,它的作用替最后那個人進行整理的。當然,遠不止這一個功能,比如你們的文檔編寫完畢后弄丟了,版本控制系統(tǒng)可以幫忙找回歷史文件。再比如,你需要整理多個不同版本的 word 文檔給不同的 boss 看,你大可不必備份多份副本,版本控制系統(tǒng)同樣可以輕松完成。所有的版本控制系統(tǒng)都是干這些的,像 SVN、CVS 等,當然 Git 也不例外。不同的是,Git 有自己的特點和版本管理方式,后續(xù)我們會詳細講解。
4. 總結(jié)
好了,今天先帶大家初識 Git,我們先從概念上對 Git 有一個大致的了解,后續(xù)再通過實際的操作和深入的理論講解去學習 Git。
本小節(jié)知識點回顧:
- Git 的誕生:絕地求生
- Git 是什么:如官網(wǎng)所說,fast version control
- Git 能干什么:主要用來管理多人協(xié)作下對文件版本的控制