Git的初步認識
怎麼說呢,作為一個程式設計師在滿足自己的物質需求後便要有精神需求,那就是要有開源的思想,只有這樣世界才會越來越精彩。
但是怎麼實現開源呢,在以前是我把你的程式碼下載下來解壓,然後匯入工程,有些編輯器還不支援匯入的方式或者匯入工程會有各種奇葩的問題,這就會讓一部分初學者產生放棄的念頭,並且即使成功了效率也是會變得很低。相反,如果一個專案跟一篇文章一樣,每個人都能一鍵複製貼上下來,然後進行自己的修改,最後提交給原作者看合適不合適,如果合適就能直接變成你改完後的文章,那工作效率是不是很方便,並且程式設計也成了一種享受。
------導讀
什麼是Git
gitHub是一個面向開源及私有軟體專案的託管平臺,因為只支援git 作為唯一的版本庫格式進行託管,故名gitHub。
gitHub於2008年4月10日正式上線,除了git程式碼倉庫託管及基本的 Web管理介面以外,還提供了訂閱、討論組、文字渲染、線上檔案編輯器、協作圖譜(報表)、程式碼片段分享(Gist)等功能。目前,其註冊使用者已經超過350萬,託管版本數量也是非常之多,其中不乏知名開源專案 Ruby on Rails、jQuery、python 等。
2018年6月4日,微軟宣佈,通過75億美元的股票交易收購程式碼託管平臺GitHub。
Git的由來
很多人都知道,Linus在1991年建立了開源的Linux,從此,Linux系統不斷髮展,已經成為最大的伺服器系統軟體了。
Linus雖然建立了Linux,但Linux的壯大是靠全世界熱心的志願者參與的,這麼多人在世界各地為Linux編寫程式碼,那Linux的程式碼是如何管理的呢?
事實是,在2002年以前,世界各地的志願者把原始碼檔案通過diff的方式發給Linus,然後由Linus本人通過手工方式合併程式碼!
你也許會想,為什麼Linus不把Linux程式碼放到版本控制系統裡呢?不是有CVS、SVN這些免費的版本控制系統嗎?因為Linus堅定地反對CVS和SVN,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用。有一些商用的版本控制系統,雖然比CVS、SVN好用,但那是付費的,和Linux的開源精神不符。
不過,到了2002年,Linux系統已經發展了十年了,程式碼庫之大讓Linus很難繼續通過手工方式管理了,社群的弟兄們也對這種方式表達了強烈不滿,於是Linus選擇了一個商業的版本控制系統BitKeeper,BitKeeper的東家BitMover公司出於人道主義精神,授權Linux社群免費使用這個版本控制系統。
安定團結的大好局面在2005年就被打破了,原因是Linux社群牛人聚集,不免沾染了一些梁山好漢的江湖習氣。開發Samba的Andrew試圖破解BitKeeper的協議(這麼幹的其實也不只他一個),被BitMover公司發現了(監控工作做得不錯!),於是BitMover公司怒了,要收回Linux社群的免費使用權。
Linus可以向BitMover公司道個歉,保證以後嚴格管教弟兄們,嗯,這是不可能的。實際情況是這樣的:
Linus花了兩週時間自己用C寫了一個分散式版本控制系統,這就是Git!一個月之內,Linux系統的原始碼已經由Git管理了!牛是怎麼定義的呢?大家可以體會一下。
Git迅速成為最流行的分散式版本控制系統,尤其是2008年,GitHub網站上線了,它為開源專案免費提供Git儲存,無數開源專案開始遷移至GitHub,包括jQuery,PHP,Ruby等等。
歷史就是這麼偶然,如果不是當年BitMover公司威脅Linux社群,可能現在我們就沒有免費而超級好用的Git了。
我們為什麼要用Git
Git是什麼?
Git是目前世界上最先進的分散式版本控制系統(沒有之一)。
Git有什麼特點?簡單來說就是:高階大氣上檔次!
那什麼是版本控制系統?
如果你用Microsoft Word寫過長篇大論,那你一定有這樣的經歷:
想刪除一個段落,又怕將來想恢復找不回來怎麼辦?有辦法,先把當前檔案“另存為……”一個新的Word檔案,再接著改,改到一定程度,再“另存為……”一個新檔案,這樣一直改下去,最後你的Word文件變成了這樣:
過了一週,你想找回被刪除的文字,但是已經記不清刪除前儲存在哪個檔案裡了,只好一個一個檔案去找,真麻煩。
看著一堆亂七八糟的檔案,想保留最新的一個,然後把其他的刪掉,又怕哪天會用上,還不敢刪,真鬱悶。
更要命的是,有些部分需要你的財務同事幫助填寫,於是你把檔案Copy到U盤裡給她(也可能通過Email傳送一份給她),然後,你繼續修改Word檔案。一天後,同事再把Word檔案傳給你,此時,你必須想想,發給她之後到你收到她的檔案期間,你作了哪些改動,得把你的改動和她的部分合並,真困難。
於是你想,如果有一個軟體,不但能自動幫我記錄每次檔案的改動,還可以讓同事協作編輯,這樣就不用自己管理一堆類似的檔案了,也不需要把檔案傳來傳去。如果想檢視某次改動,只需要在軟體裡瞄一眼就可以,豈不是很方便?
這個軟體用起來就應該像這個樣子,能記錄每次檔案的改動:
版本 | 檔名 | 使用者 | 說明 | 日期 |
---|---|---|---|---|
1 | service.doc | 張三 | 刪除了軟體服務條款5 | 7/12 10:38 |
2 | service.doc | 張三 | 增加了License人數限制 | 7/12 18:09 |
3 | service.doc | 李四 | 財務部門調整了合同金額 | 7/13 9:51 |
4 | service.doc | 張三 | 延長了免費升級週期 | 7/14 15:17 |
這樣,你就結束了手動管理多個“版本”的史前時代,進入到版本控制的20世紀。