Git 是一套內容尋址 (content-addressable) 文件系統git
這部分命令通常被稱做「底層(plumbing)」命令,而那些更友好的命令則被稱做「高層(porcelain)」命令。數據庫
目錄結構spa
目錄功能:指針
objects
目錄存儲全部數據內容;refs
目錄存儲指向數據(分支)的提交對象的指針;HEAD
文件指示目前被檢出的分支;index
文件保存暫存區信息code
Git 的核心部分是一個簡單的鍵值對數據庫(key-value data store)。對象
主要的 Git 對象——數據對象、樹對象、提交對象(「blob」「tree」 「commit」 )——最初均以單獨文件的形式保存在 .git/objects
目錄下it
Git 會將上述頭部信息和原始數據拼接起來,並計算出這條新內容的 SHA-1 校驗和。Git 會經過 zlib 壓縮這條新內容。object
sha1計算:im
sha1sum "blob #{content.length}\0content"
SHA-1 值的前兩個字符做爲子目錄名稱,後 38 個字符則做爲子目錄內文件的名稱數據
https://git-scm.com/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E5%BA%95%E5%B1%82%E5%91%BD%E4%BB%A4%E5%92%8C%E9%AB%98%E5%B1%82%E5%91%BD%E4%BB%A4