Intro
版本號控制系統是什么
版本號控制系統(Version Control System,VCS)能夠幫助我們記錄和跟蹤項目中各文件內容的改動變化。它能夠幫我們保存項目的各個版本號。以及改動原因,我們能夠借用此工具回到項目以前的某個狀態。除此之外,版本號控制系統也是幫助人員進行協作開發的利器。
Git是什么
Git是一個
分布式版本號控制系統(Distributed Version Control System,DVCS)。與傳統的集中式版本號控制系統(如CVS、Subversion和ClearCase)相比,Git具有下面優勢:
版本號庫
版本號庫(Repository)是版本號控制系統用來存儲全部歷史數據的地方。大多數版本號控制系統在版本號庫中存儲各個文件的當前狀態、歷史改動時間、誰做的改動、以及改動的原因、還有改動的內容。
常見的版本號控制系統能夠分為兩種類型。
一種是集中式版本號庫(Centralized Repository),全部的程序猿都會把他們的改動提交到server上的一個公共版本號庫。詳細來說,每個程序猿在本地有一個工作文件夾樹,其內容是該版本號庫中最新的代碼。
當他們在工作文件夾樹中完畢代碼的改動后。就把改動提交回該版本號庫中。這樣的方式有一定局限性,在本地工作文件夾樹中。僅僅能看到代碼的最新版本號。假設想查詢歷史改動記錄,就必須與server上的版本號庫打交道,就必需要使用網絡。
假設沒有網絡,也無法記錄當前已改動后的項目版本號。
還有一種就是
分布式版本號庫(Distributed Repository)。使用分布式版本號控制系統,在本地就有自己的版本號庫,全部的歷史記錄都會記錄在本地的版本號庫中,提交代碼的時候不用連接到遠程版本號庫,而是記錄在本地的版本號庫中。git就是這種一種版本號控制系統。
那么git是如何將本地的改動上傳到項目的主版本號庫中的呢?有兩種方式:1. 通過push操作直接把改動上傳到主版本號庫。2.生成包括少量改動的補丁包,把補丁包提交給項目維護人員。再由他更新主版本號庫。
工作文件夾樹
工作文件夾樹是版本號庫的一個"斷面視圖"。它包含了開發該項目所須要的所有文件。包含源碼文件、構建文件、單元測試文件等。
在Git中,版本號庫不在server上,而存儲在本地工作文件夾樹中的".git"文件夾中。工作文件夾樹是怎么創建出來的呢?有兩種方法。1. 用Git相關的命令初始化版本號庫,也就是生成".git"文件夾。於是".git"文件夾的父文件夾就成了工作文件夾樹。2. 克隆(Clone)一個已有的版本號庫。也就連帶創建了對應的工作文件夾樹。
克隆一個已有的版本號庫,就是創建該版本號庫的一個拷貝,並把版本號庫中
主分支(Master Branch)的內容
檢出(check out)到工作文件夾樹。在Git中,檢出是指把工作文件夾樹更新,並使其內容與版本號庫中某個特定的歷史版本號同樣。
代碼改動與文件同步
代碼在修改之后。須要
提交(commit)這些修改。每次提交操作都使得版本號庫中新增一個
版本號(Revision)。
除了記錄修改內容本身外。版本號庫還記錄修改的日志信息(log message)或稱提交留言(commit message),這是代碼的變動原因。
我們在開發的過程中,有時須要將本地的修改共享。
為此,須要把變動推入(push)上游版本號庫(upstream repository)。
上游版本號庫是一個公共版本號庫。
與push相反。我們也應該可以把公共版本號庫中內容取到本地版本號庫中來。須要兩步操作。
第一步。把修改取來(Fetch),把遠程版本號庫中的版本號和分支拷貝到本地版本號庫中。第二步。在本地版本號庫中,把從遠程版本號庫里取來的修改與自己本地的修改合並(Merge)。一般來說,取來操作和合並操作總是先后運行的。因此,在Git中可以用一個命令完畢這兩步操作:拖入(Pull)。
標簽
標簽以一個簡單的名稱(即標簽名)來標記版本號庫歷史中某個特定的點。它能夠是一個重要的里程碑,比方對外正式公布的版本號;也能夠是相對普通的時間點。比方在修復一個缺陷后打個標簽。
本質上。標簽是一個對於使用者來說易於理解易於記憶的名字。用來標識版本號庫中一個難讀難記的內部版本號號,以此幫助使用者跟蹤版本號歷史。
分支
使用
分支(branche)能夠使你的項目有多條路徑能夠前進。下圖展示了分支原理。
主分支(Master Branch)是研發的主線,一些版本號控制工具也把主分支稱作
主干(trunk)。
分支很自由,分支后面能夠合並到主分支上。也能夠選擇不合並。
甚至。你也能夠把分支看成是還有一個主干。別人能夠從你的分支上再拉取一個分支。
合並
合並操作會把兩條及兩條以上的分支合並到一起。Git會比較各分支上的變化,確定變化在哪里發生、哪個文件的哪個位置。當不同的變化發生在文件的不同部分時,Git可以自己主動合並。但當發生在同一位置時。就會提示沖突,等待人工介入。而合並的全部操作會被Git所記錄下來,便於以后能回歸(revert)或者查看。
總結
在本章中,介紹了Git中最核心的幾個概念:版本號庫、版本號、分支、合並。版本號庫是項目的相關內容的容器,而版本號是項目在每一個時刻下的視圖。分支、合並則為團隊之間的協作提供支持。