20150909 [學習筆記] Git版本控制(4)
[內容摘要] 基本觀念 -- 儲存庫、工作目錄、Git資料結構
  • (一)了解儲存庫 (Repository)
  • (二)了解工作目錄 (working directory)
  • (三)了解 Git 的資料結構
 
 
[基本概念] 使用Git版本控制 
  • STEP 1  : 要使用 Git 版本控管,必須先建立「工作目錄」與「版本庫」。(mkdir, git init)
  • STEP 2 : 要在「工作目錄」進行開發,可能會建立目錄、建立檔案、修改檔案、刪除檔案、... 等操作。
  • STEP 3 : 然後當你想提交一個新版本到 Git 的「儲存庫」裡,一定要先更新「索引」狀態。(git add, git mv, ...)
  • STEP 4 : 然後 Git 會依據「索引」當下的狀態,決定要把那些檔案提交到 Git 的「儲存庫」裡。(git status)
  • STEP 5 : 最後提交變更時 (git commit),才會把版本資訊寫入到「物件儲存區」當中 (此時將會寫入 commit 物件)。
 
 
 
 

(一)了解儲存庫 (Repository)

  • 如果要在任意一個資料夾建立一個 Git 儲存庫,只要輸入以下指令:
git init
  • 執行git init 之後,Git 會自動幫我們建立一個所謂的 Git repository 在該目錄的 .git 目錄下,這個 .git 資料夾,就是一個完整的 Git 儲存庫,未來所有版本的變更,都會自動儲存在這個資料夾裡面
  • [範例] 在這裡目錄為 C:\Users\user\Documents\GitHub\git-demo
 
 
 
 

(二)了解工作目錄 (working directory)

  • 上述C:\Users\user\Documents\GitHub\git-demo此時就會自動成為我們的「工作目錄」 (working directory)
  • 所謂「工作目錄」,就是我們正在準備開發的專案檔案,未來都會在這個目錄下進行編輯,例如 : 
  • 新增檔案
  • 修改檔案
  • 刪除檔案
  • 檔案更名
  • ...其他 Git 相關的操作,都會在這個目錄下完成
 
  • 操作 Git 指令參數時,通常都是在「工作目錄」下執行的。
 
 
 
 

(三)了解 Git 的資料結構

在 Git 裡有兩個重要的資料結構,分別是「物件」與「索引」
  • 「物件」用來保存版本庫中所有檔案與版本紀錄
  • 「索引」則是用來保存當下要進版本庫之前的目錄狀態。
 
 
1. 關於物件
  • 所謂的「物件」是一個「特別的檔案」,該檔案的產生過程是將一個檔案的內容中取出,透過內容產生一組 SHA1 雜湊值,然後依照這個 SHA1 雜湊值命名的一個檔案。
  • 在使用 Git 進行版本控管的過程中,所有要進行控管的目錄與檔案,都會先區分「目錄資訊」(tree) 與「檔案內容」(blob)
  • (1)blob 物件
  • 就是把原本的「檔案內容」當成 blob 檔案的內容 (注意: blob 物件其實就是一個實體檔案),然後再將其內容進行 SHA1 雜湊運算後產生的一個 hash id,再把這個 hash id 當成 blob 檔案的檔名。由此可知,blob 物件是一個「只有內容」的檔案,其檔名又是由內容產生的,所以,任何一的單獨存在的 blob 檔案通常對版本控管沒有任何幫助。
  •  
  • (2)tree 物件
  • 用來儲存特定資料夾下包含哪些檔案,以及該檔案對應的 blob 物件的檔名為何。在 tree 物件中,除了可以包含 blob 物件的檔名與相關資訊,還可以包含其他的 tree 物件。所以 tree 物件其實就是「資料夾」的代名詞
 
  • 無論 blob 物件與 tree 物件,這些都算是物件,這些物件都會儲存在一個所謂的「物件儲存區」 (object storage) 之中,而這個「物件儲存區」預設就在「儲存庫」的 objects 目錄下,如下圖示 : 
 
 
2. 關於索引
  • 「索引」是一個經常異動的暫存檔,這個檔案通常位於 .git 目錄下的一位名為 index 的檔案
  • 主要用來紀錄「有哪些檔案即將要被提交到下一個 commit 版本中」。換句話說,如果你想要提交一個版本到 Git 儲存庫,那麼你一定要先更新索引狀態,變更才會被提交出去。
  •  
  • 索引檔通常保存Git 儲存庫中特定版本的狀態,這個狀態可以由任意一個 commit 物件,以及 tree 物件表示。
 
  • 正常情況下不會直接去編輯 .git\index 這個二進位檔,而是透過標準的 git 指令去操作這個索引檔,對於索引檔的操作指令常用的有以下幾個 : (相關說明請看 20150826 [學習筆記] Git 版本控制(3) )
  • git add
  • git mv
  • git rm
  • git status
  • git commit
  • git ls-files
 
  • 「索引」是介於「物件儲存區」 (object storage) 與「工作目錄」 (working directory) 之間的媒介。