Git(一):Git與版本控制簡介

Intro
版本控制系統是什麼
     版本控制系統(Version Control System,VCS)能夠幫助咱們記錄和跟蹤項目中各文件內容的修改變化。它能夠幫咱們保存項目的各個版本,以及修改緣由,咱們能夠借用此工具回到項目曾經的某個狀態。除此以外,版本控制系統也是幫助人員進行協做開發的利器。
Git是什麼
     Git是一個分佈式版本控制系統(Distributed Version Control System,DVCS)。與傳統的集中式版本控制系統(如CVS、Subversion和ClearCase)相比,Git具備如下優點:
分佈式體系結構:能夠徹底斷網工做,不受網絡鏈接的限制
分支與合併操做很容易:建立分支簡單、經濟、快速,Git只會保存與主幹的差別,這與其餘版本控制系統不同。Git把分支上全部修改合併回父分支,即便屢次,也只是一眨眼的功夫
跟Subversion進行交互:Git能夠從SubVersion的版本庫中導入全部的歷史,並把你在Git中的改動發送回Subversion的版本庫 git

版本庫
     版本庫(Repository)是版本控制系統用來存儲全部歷史數據的地方。大多數版本控制系統在版本庫中存儲各個文件的當前狀態、歷史修改時間、誰作的修改、以及修改的緣由、還有修改的內容。
     常見的版本控制系統能夠分爲兩種類型。一種是集中式版本庫(Centralized Repository),全部的程序員都會把他們的改動提交到服務器上的一個公共版本庫。具體來講,每個程序員在本地有一個工做目錄樹,其內容是該版本庫中最新的代碼。當他們在工做目錄樹中完成代碼的修改後,就把改動提交回該版本庫中。這種方式有必定侷限性,在本地工做目錄樹中,只能看到代碼的最新版本。若是想查詢歷史修改記錄,就必須與服務器上的版本庫打交道,就必需要使用網絡。若是沒有網絡,也沒法記錄當前已修改後的項目版本。
     另外一種就是分佈式版本庫(Distributed Repository)。使用分佈式版本控制系統,在本地就有本身的版本庫,全部的歷史記錄都會記錄在本地的版本庫中,提交代碼的時候不用鏈接到遠程版本庫,而是記錄在本地的版本庫中。git就是這樣的一種版本控制系統。那麼git是怎樣將本地的修改上傳到項目的主版本庫中的呢?有兩種方式:1. 經過push操做直接把修改上傳到主版本庫。2.生成包含少許修改的補丁包,把補丁包提交給項目維護人員,再由他更新主版本庫。 程序員

工做目錄樹
     工做目錄樹是版本庫的一個"斷面視圖"。它包括了開發該項目所須要的所有文件,包括源代碼文件、構建文件、單元測試文件等。
     在Git中,版本庫不在服務器上,而存儲在本地工做目錄樹中的".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中最核心的幾個概念:版本庫、版本、分支、合併。版本庫是項目的相關內容的容器,而版本是項目在每一個時刻下的視圖。分支、合併則爲團隊之間的協做提供支持。 測試

相關文章
相關標籤/搜索