git 基礎知識精講

作者:日期:2018-05-26 19:27:14 點擊:1099

Linux Torvalds在 1991 年創建了開源的Linux,從此Linux系統不斷發展,已經成為最大的服務器系統軟件;Linux雖然創建了Linux,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為Linux編寫代碼,那Linux的代碼是如何管理的呢?

事實是,在2002年以前,世界各地的志愿者把源代碼文件通過diff的方式發給Linux,然后由Linux本人通過手工方式合并代碼!
你也許會想,為什么Linux不把Linux代碼放到版本控制系統里呢?不是有 CVS SVN 這些免費的版本控制系統嗎?因為Linux堅定地反對CVS和SVN,這些 集中式 的版本控制系統不但速度 ,而且必須 聯網 才能使用。有一些商用的版本控制系統,雖然比CVS、SVN好用,但那是付費的,和Linux的開源精神不符。

不過,到了2002年,Linux 系統已經發展了十年了,代碼庫之大讓 Linux很難繼續通過手工方式管理了,社區的弟兄們也對這種方式表達了強烈不滿,于是Linux選擇了一個商業的版本控制系統 BitKeeper ,BitKeeper的東家BitMover公司出于人道主義精神,授權Linux社區免費使用這個版本控制系統。

安定團結的大好局面在 2005 年就被打破了,原因是Linux社區牛人聚集,不免沾染了一些梁山好漢的江湖習氣。開發Samba的Andrew試圖破解BitKeeper的協議,被BitMover公司發現了(監控工作做得不錯!),于是BitMover公司怒了,要收回Linux社區的免費使用權。

Linux花了 兩周時間 自己用 C 寫了一個分布式版本控制系統,這就是Git!一個月之內,Linux系統的源碼已經由Git管理了!

Git迅速成為最流行的分布式版本控制系統,尤其是 2008GitHub 網站上線了,它為開源項目 免費 提供Git存儲 ,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。

1、什么是版本控制系統

如果你用Microsoft Word寫過長篇大論,那你一定有這樣的經歷:
想刪除一個段落,又怕將來想恢復找不回來怎么辦?有辦法,先把當前文件“另存為…”一個新的Word文件,再接著改。改到一定程度,再“另存為…”一個新文件,這樣一直改下去,最后你的Word文檔變成了這樣:

Alt text

過了一周,你想找回被刪除的文字,但是已經記不清刪除前保存在哪個文件里了,只好一個一個文件去找。

看著一堆亂七八糟的文件,想保留最新的一個,然后把其他的刪掉,又怕哪天會用上,還不敢刪,真郁悶

更要命的是,有些部分需要你的同事幫助填寫,于是你把文件Copy到U盤里給她,然后你繼續修改Word文件。一天后,同事再把Word文件傳給你,此時你必須想想,發給她之后到你收到她的文件期間,你作了哪些改動,得把你的改動和她的部分合并。

于是你想,如果有一個軟件,不但能自動幫我記錄每次文件的改動,還可以讓同事 協作編輯 ,這樣就不用自己管理一堆類似的文件了,也不需要把文件傳來傳去。如果想查看某次改動,只需要在軟件里瞄一眼就可以,豈不是很方便?

這個軟件用起來就應該像這個樣子,能記錄每次文件的改動:

Alt text

Git是目前全世界最主流的 版本控制系統 之一

  • 備份文件

類似于用網盤備份電影。我們的代碼也需要備份。修改完了以后提交給版本庫進行保管,哪一天代碼沒了也可以找回來。比如我們打游戲就要存檔,萬一掛了還可以從上個存檔的地方重玩。

  • 記錄歷史

和網盤不同,網盤保留的是最新的狀態,歷史的記錄都沒有了,修改的記錄也都找不回來了,我想知道文件里的哪一行是我哪一天加進去的。網盤是不知道的。
但版本管理工具會記錄是哪個人,在什么時候,修改了什么東西。

  • 回到過去

如果我有一天不小心刪除了某個文件,我們可以通過歷史備份找回來

  • 多端共享

手機 PAD 都可以共享代碼

  • 團隊協作

多人協作,處理沖突

  • 開源協作

看別人的開源代碼 或者 開源自己的項目

2、集中式 vs 分布式

Linux一直痛恨的CVS及SVN都是集中式的版本控制系統,而Git是分布式版本控制系統,集中式和分布式版本控制系統有什么區別呢?

集中式版本控制系統

版本庫是集中存放在 中央服務器 的,而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務器。

中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館。

Alt text

集中式版本控制系統最大的毛病就是必須 聯網 才能工作,如果在局域網內還好,帶寬夠大,速度夠快,可如果在互聯網上,遇到網速慢的話,可能提交一個10M的文件就需要5分鐘,這還不得把人給憋死啊。

分布式版本控制系統

與集中式版本控制系統有何不同呢?首先,分布式版本控制系統根本沒有 中央服務器 ,每個人的電腦上都是一個 完整的版本庫 ,這樣你工作的時候,就不需要聯網了,因為版本庫就在你自己的電腦上。

既然每個人電腦上都有一個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

和集中式版本控制系統相比,分布式版本控制系統的安全性要高很多,因為每個人電腦里都有完整的版本庫 ,某一個人的電腦壞掉了不要緊,隨便從其他人那里復制一個就可以了。而集中式版本控制系統的中央服務器要是出了問題,所有人都沒法干活了。

在實際使用分布式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們倆不在一個局域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。因此分布式版本控制系統通常也有一臺充當“中央服務器”的電腦,但這個服務器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已。

Alt text

當然,Git的優勢不單是不必聯網這么簡單,后面我們還會看到Git極其強大的 分支 管理,把SVN等遠遠拋在了后面。

課后擴展:集中式和分布式版本管理系統的區別?
1、集中式版本控制系統:所有的版本備份和歷史記錄都在中央服務器上,每個人的電腦僅僅是一個開發代碼的地方而已;如果想要查看歷史記錄,我們必須聯網,訪問到中央服務器才可以。

2、分布式版本控制系統:每個人都是一個單獨的版本控制系統,在自己的本地就可以創建一個倉庫,可以記錄版本和歷史;我們也可以向集中式一樣,建立一個中央服務器,每個人可以把自己本地的信息推送到中央服務器上(僅僅是為了方便團隊之間互相觀看)

3、Git的安裝

windows系統

windows下要使用很多Linux/Unix的工具時,需要cygwin 這樣的模擬環境,git也一樣,cygwin的安裝和配置都比較復雜,就不建議你折騰了。不過有高人已經把模擬環境和git都打包好了,名叫msysgit ,只需要下載一個單獨的exe安裝程序,其他什么也不用裝,絕對好用。

msysgit 是windows版的Git,從http://git-scm.com/下載,然后按默認選項安裝即可。

Alt text

詳細安裝步驟:

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text

Alt text

檢查是否安裝成功

Alt text

MAC下安裝

兩種辦法:

1、安裝 homebrew ,然后通過homebrew安裝Git。先打開網站 http://brew.sh/。 拷貝對應腳本到終端下安裝homebrew,然后在終端執行brew install git的命令。