1.Git與版本控制簡介

尊重原創:原文鏈接地址:點擊打開鏈接

Intro

版本控制系統是什麼
     版本控制系統(Version Control System,VCS)可以幫助我們記錄和跟蹤項目中各文件內容的修改變化。它可以幫我們保存項目的各個版本,以及修改原因,我們可以借用此工具回到項目曾經的某個狀態。除此之外,版本控制系統也是幫助人員進行協作開發的利器。
Git是什麼
     Git是一個分佈式版本控制系統(Distributed Version Control System,DVCS)。與傳統的集中式版本控制系統(如CVS、Subversion和ClearCase)相比,Git具有以下優勢:
  • 分佈式體系結構:可以完全斷網工作,不受網絡連接的限制
  • 分支與合併操作很容易:創建分支簡單、經濟、快速,Git只會保存與主幹的差異,這與其他版本控制系統不一樣。Git把分支上所有修改合併回父分支,即使多次,也只是一眨眼的功夫
  • 跟Subversion進行交互:Git可以從SubVersion的版本庫中導入所有的歷史,並把你在Git中的改動發送回Subversion的版本庫 

版本庫

     版本庫(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中最核心的幾個概念:版本庫、版本、分支、合併。版本庫是項目的相關內容的容器,而版本是項目在每個時刻下的視圖。分支、合併則爲團隊之間的協作提供支持。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章