1. 程式人生 > >Git教程1——概論

Git教程1——概論

Git是一個版本管理系統(VCS,version control system),其誕生只為一個目的,那就是管理檔案的變更。它使得你可以記錄軟體專案的任何更改,以及更改的位置。這也使得git成為管理大型專案不可或缺的工具,同時也是你各種工作流程的得力助手。

版本控制簡史

在談到git背後的核心理念之前,首先我們大致瀏覽一下版本控制系統的變革史。

檔案和目錄

版本控制軟體誕生之前,只有檔案和目錄。這時記錄專案版本資訊的方法就是,複製整個專案目錄,然後重新命名。回想一下,你是否經常將備份檔案命名為類似my-term-paper-2.doc的檔案。其實這就是一種最原始的版本控制。
Revision control with files and folders
不過顯而易見的是,對於軟體開發者來說,複製一個目錄到另一個目錄是多麼令人沮喪。假如目錄名被拼寫錯誤了怎麼辦?再者,你錯誤的覆蓋了某個檔案又該怎麼辦?你又該如何得知是否丟失了一段重要的程式碼?值得慶幸的是,很快開發者們就意識到需要一個更可靠的工具了。

本地VCS

之後,開發者們就開始編寫一些工具程式來幫助自己進行版本管理了。藉助於這些工具程式,舊版本的檔案不再獨立存在,而是被放到了資料庫。當你需要舊版本檔案時,工具程式(VCS)就到資料庫中將之取回。這樣,任意時刻都只有一個版本被檢出(checked out),從而大大降低了檔案混淆和錯誤覆蓋的可能性。
這裡寫圖片描述
這時的版本管理都在開發者的本地進行,多個開發者分享程式碼很不方便。

集中式VCS

引入集中式版本控制系統(CVCS)後。CVCS會將所有的版本資訊儲存在伺服器。開發者通過網路檢出和提交程式碼到伺服器。這方便了多個開發者在一個專案上分工協作。
這裡寫圖片描述
雖然相比與本地VCS,這是很大的進步,但是集中式系統然後有一些問題:多個人同時工作於同一個檔案怎麼辦?試想如此場景,兩個人同時修改同一個bug,並試圖向伺服器提交他們的更改,伺服器應該接收哪個提交?

CVCS的解決辦法是,禁止覆蓋他人的更改。如果有更改發生衝突,必須有個人做出讓步,並手動合併這些差異。這個方法適用於需要相對較少更改(意味衝突相對較少)的專案。如果專案有多個活躍的參與者,並且每天提交很多更新,這種解決辦法就會顯得笨拙:開發工作有時不得不中止以等待所有衝突得到解決。

分散式VCS

新一代的版本控制系統摒棄了集中程式碼倉庫(repository)的概念,取而代之的是讓每個開發者擁有一個專案程式碼倉庫的本地拷貝。如此形成的分散式系統使得開發者可以獨立工作,這在某種程度上和本地VCS類似,同時集中式VCS中遇到的衝突決議問題得到了更好的解決。
這裡寫圖片描述
由於沒有了一箇中央集中的程式碼倉庫,每個開發者可以按照自己的步調工作,在本地儲存更新,並且只需要在方便的時刻進行衝突合併即可。除此之外,分散式版本管理系統(DVCS)致力於對獨立分支開發的有效管理。這使得更加方便於程式碼分享,合併衝突,以及新想法的試驗。

分散式版本控制系統(DVCS)的本地屬性也有益於加快開發進度,畢竟你不再需要頻繁的通過網路進行操作。同時DVCS也大大減小了由於伺服器癱瘓或者其它原因操作資料丟失的可能性,因為參與開發的每個人都擁有一個原生代碼倉庫。

git誕生

因此,git橫空出世。一個為了管理Linux核心而創造出來的分散式版本管理系統。2005年,Linux社群不再被授權使用一款從2002年就開始使用的商業DVCS,BitKeeper。作為迴應,Linus Torvalds倡議開發一個新的替代品,然後git就誕生了。
作為Linux核心的原始碼管理工具,git具有以下特性,包括:

  • 可靠
  • 大型專案的高效管理
  • 支援分散式開發
  • 支援非線性開發

即使當時有一些其它的DVCS存在(如,GNU的Arch或者David Roundy的Darcs), 但是沒有一個可以滿足所有這些要求。在這個目標的驅動下,經過多年的努力開發,git已經十分可靠,受到了廣大的歡迎,和社群的積極參與。

git最開始是作為一個命令列工具發行的,經過多年的發展,多種視覺化介面也已經可用了。圖形介面遮蔽了git背後的一些複雜度,使得可以很直觀的瞭解一個程式碼倉庫的狀態,雖說如此,堅實的分散式版本控制基礎知識還是非常有必要的。本著這個考慮,在本教程中我們堅持使用命令列,畢竟這也是與git互動的通用方式。

安裝

在接下里的章節中,我們會通過將git應用到真實場景的方式來探索git的各種特性。前提是你已經安裝好了git。各平臺的安裝包可以在git官網下載

對於Windows使用者,這會安裝一個特殊的命令列終端,Git Bash。所有的git命令都應該通過這個終端輸入而不是系統自帶的命令提示符。OS X和Linux使用者可以通過原生終端輸入git命令。為了驗證你是否安裝成功,開打終端並執行git --version。你應該看到輸出類似git version 1.7.10.2 (Apple Git-33)的資訊。

預備開始

請記住本教程是為了展示git的各種特性,而不是僅僅給出一些常用的git命令。為了確保從本教程學到更多的知識,請務必在終端中執行你讀到的每個命令。讓我們坐到電腦前開始吧!