2012年7月14日 星期六

Git Basics

Git 基本觀念

在正式進入主題之前我們需要先認識版本控制系統,以及Git常見的一些名詞定義。

  • Version Control System(VCS) - 版本控制系統,Git屬於一種版本控制系統其他常見的版本控制系統有CVS、SVN、Mercurial等。可以把控制系統理解成一個時空機器,我們能將特定時間點的資料加上一些註記然後往版本控制系統裡放,持續放了許多筆資料之後版本控制系統能夠輕易的幫助人們尋找以前所存放的資料,以及比對不同比資料之間的差異以及演進關係。
  • Repository - 知識庫,用來儲存所有資料以及歷史紀錄的地方。
  • origin 表示遠(或 server)端的 repository,與 local repository 做區隔。 
  • Working directory - 工作目錄,使用者新增、編輯檔案地方。
  • Commit - Commit 是由資料夾與檔案加上註記訊息所組成的一筆歷史紀錄。
  • Tag - tag 是一個連結標籤可以連結到特定一筆 commit,通常會以人們容易記憶的文字或是版本號對 tag 命名,方便日後尋找 commit 使用。
  • Branch - branch 是一種特殊形式的 tag,它不是連結至特定的 commit 而是連結至某一系列連續發展的 commit,可用於追蹤版本之間的演進過程。
  • master 是一個預設的 branch,通常用來表示開發的主線
  • Staging Area - Staging Area 有許許多多的別稱,例如 index、cache 指的都是相同一件事,使用者在更改 Working directory 中的資料之後,在 commit 之前可以將修改的紀錄暫時存放在 Staging Area 中。
接著讓我們關注到 Git 在 local 端如何操作,首先我們可以在 working directory 底下新增或編輯檔案,接著把修改的部份放到 stage area 暫存,確定該版本需要被紀錄時可以將它 commit 到 repository 中,於是新增一筆 commit 紀錄。實際上開發過程中通常會持續的 commit 許多個新版本至 repository 中,當我們需要檢視以前的版本時可以將檔案資料從 repository 中 checkout 出來至 working directory 中。




假設一個專案是由許多開發人員共同開發那麼肯定不單純只有 local 端的操作,當我們與別人分享開發的成果時就需要透過 remote 的操作,除了 local 端的 stage、commit 以及 checkout (圖中的 index = staging area),還多了 push、fetch 和 pull 操作,push 是把 local repository 的修改結果傳送至 remote repository (或稱為origin),反之 fetch 則是將 remote repository 的資料下載至 local repository,pull 則是合併 fetch 以及 checkout 的操作,不過通常不建議使用 pull 它可能會使編輯到一半 working directory 的內容被覆蓋掉。




沒有留言:

張貼留言