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


Intro

版本號控制系統是什么
      版本號控制系統(Version Control System,VCS)能夠幫助我們記錄和跟蹤項目中各文件內容的改動變化。它能夠幫我們保存項目的各個版本號。以及改動原因,我們能夠借用此工具回到項目以前的某個狀態。除此之外,版本號控制系統也是幫助人員進行協作開發的利器。
Git是什么
     Git是一個 分布式版本號控制系統(Distributed Version Control System,DVCS)。與傳統的集中式版本號控制系統(如CVS、Subversion和ClearCase)相比,Git具有下面優勢:
  • 分布式體系結構:能夠全然斷網工作,不受網絡連接的限制
  • 分支與合並操作非常easy:創建分支簡單、經濟、高速,Git僅僅會保存與主干的差異,這與其它版本號控制系統不一樣。

    Git把分支上全部修改合並回父分支,即使多次。也僅僅是一眨眼的功夫

  • 跟Subversion進行交互:Git能夠從SubVersion的版本號庫中導入全部的歷史,並把你在Git中的修改發送回Subversion的版本號庫 

版本號庫

      版本號庫(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中最核心的幾個概念:版本號庫、版本號、分支、合並。版本號庫是項目的相關內容的容器,而版本號是項目在每一個時刻下的視圖。分支、合並則為團隊之間的協作提供支持。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM