Loading...
20150917
[學習筆記]
Git版本控制(5)
整理自
第 06 天:解析 Git 資料結構 - 物件結構
[基本概念] 物件的概念
Git 裡的「物件」十分重要,雖然在操作 Git 指令的過程中通常不太需要直接接觸這些檔案,不過了解這些物件的存在,有助於理解 Git 的運作模式與 設計概念。
[內容摘要] Git 資料結構
(一)物件資料庫
(二)物件類型
(三)物件結構的優點
(一)物件資料庫
「物件」是一種「不可變的」
(immutable)
檔案類型,儲存在「物件儲存區」的檔案只進不出,也不會被修改。
[ 原因 ]
如果竄改檔案內容,新的內容運算出來的 SHA1 雜湊值會與原有物件的檔名不一樣,會導致 Git 無法繼續執行。(有保護作用)
物件(blob 物件與 tree 物件)都會儲存在一個所謂的「物件儲存區」
(object
storage) 之中,預設在「儲存庫」的 objects 目錄下:
每一個「物件」,都是以「檔案內容」進行 SHA1 雜湊運算出一個 hash 值,並用這個 hash 值當作物件的名稱。
[ 例子1 ]
「檔案內容」:
8a6b275638f3cf164395e65066a1132bb36b7896
(1)
前兩個字元
(8a)
當作目錄
。
(2)
剩下的值
(6b275638f3cf164395e65066a1132bb36b7896)
當成檔名
。
(3)
這些物件的實體目錄與檔案也都會放在 .git\objects 目錄下,如下圖示:
(二)物件類型
[ 參考影片 ]
(必看)
認識 Git 資料結構中的物件資料庫與物件之間的關係
[ 物件的壓縮 ]
zlib 演算法
提升存取效率。
節省空間 : 計算出 blob 之間的差異,將這些差異儲存在一個名為
packfile
的檔案中。
(通常
packfile
會置於 .git\objects\pack 目錄)
[
物件之間的關聯
]
透過 tree 物件
(資料夾的快照)
與 commit 物件
(每一個版本的快照)
,能夠得知 blob 與版本的關係。
1. blob 物件:檔案的"內容"。
工作目錄中某個檔案的
"內容"(當你執行
git add 指令的同時,這些新增檔案的內容就會立刻被寫入成為 blob 物件,檔名則是物件內容的雜湊運算結果)。
2. tree 物件:儲存目錄下的資訊。
包含該目錄下的檔名、對應的 blob 物件名稱、檔案連結(symbolic link) 或其他 tree 物件等等。
tree 物件可以包含其他 tree 物件,像「資料夾」。
tree 物件是在特定版本下某個資料夾的快照(Snapshot)。
Please turn on JavaScript to use Paper in all of its awesomeness. ^_^
整理自第 06 天:解析 Git 資料結構 - 物件結構
(一)物件資料庫
(二)物件類型