深入理解Git 二 內部的資料結構

2021-07-02 02:43:31 字數 783 閱讀 3519

git是來管理資料的,也儲存資料,所以可以說也是乙個資料庫,乙個特殊的資料庫,不同於rdbms和nosql的資料庫,一種索引資料可以快速查詢資料變化的資料庫。這

節我們學習git的物件儲存方式。

git為了快速查詢資料,將資料新增乙個header封裝為資料物件,然後進行hash,將此hash值當作物件名字,以後根據此hash值變可找到資料。具體的實現方式為:hash

值的前2位是檔案的目錄名字,後面的值為檔名。

由於進行hash,一旦檔案內容改變,其對應的hahs值就會變化,因而很適合變化的資料。

注意,本篇使用指標這個術語指代物件的hash值。

git總共有四類物件:

1 blob物件,就是存真正資料的物件。這種物件的sha-1 hash值只跟內容有關,跟檔名,檔案模式,hash時的時間沒有關係。

2 tree物件,管理物件的物件,其內容指出包含了哪些子物件,tree物件是遞迴的。跟blob指標,檔名,檔案模式有關,跟hash時的時間無關。

3 commit物件,git歷史記錄物件,裡邊儲存tree物件和父親commit物件,tree物件可以找到相應的資料,父親commit物件可以找到歷史紀錄。跟cache中的tree指標和hash時的時間有關,如果cache中的內容都一樣,不同時間生成的commit物件的hash值也不同。

4 tag物件,上面三種物件的別名表達方式。由於git物件對名字是hash值,所以很不容易記住,所以需要使用者自定義一些好記的名字指引別的物件。

原文:hongchangfirst

hongchangfirst的主頁:

深入理解程式 資料結構 演算法

程式 資料結構 演算法 研究程式 研究資料物件有哪些?用什麼樣的儲存方式去儲存這些資料物件?為資料物件選擇什麼樣的儲存型別?需要執行的操作有哪些?這樣的操作用什麼樣的演算法好一些呢?什麼樣的演算法算是好的演算法呢?時間複雜度最低!空間複雜度最低!其中時間複雜度由程式的控制結構決定,順序,選擇 o 1...

深入理解Redis 一 基本資料結構

個人主頁 tuzhenyu s page 內部資料結構主要包括 動態字串,雙端鍊錶,字典,跳躍表 記憶體對映資料結果主要包括 整數集合,壓縮列表 struct sdssds使用抽象結構中的len來判斷字元創的結尾,而不是像c一樣使用空字元 0 表示結尾,保證了二進位制的安全 typedef stru...

資料結構之深入理解紅黑樹

本文將會透徹理解什麼是紅黑樹,有什麼特點 優點與缺點,與其它樹結構 二叉查詢樹 平衡二叉樹 2 3 4樹 有什麼區別和聯絡。寫作本文的目的旨在加深自己的理解,文中許多內容參考了網路上的文章並根據自己的理解進行了整理。紅黑樹 英語 red black tree 一種二叉查詢樹,但在每個結點上增加乙個儲...