從根本上來講 git 是乙個內容定址(content-addressable)檔案系統,並在此之上提供了乙個版本控制系統的使用者介面。git 的核心部分是乙個簡單的鍵值對資料庫(key-value data store)。 你可以向該資料庫插入任意型別的內容,它會返回乙個鍵值,通過該鍵值可以在任意時刻再次檢索(retrieve)該內容。
.git目錄
當在乙個新目錄或已有目錄執行 git init 時,git 會建立乙個 .git 目錄。 這個目錄包含了幾乎所有 git 儲存和操作的物件。 如若想備份或複製乙個版本庫,只需把這個目錄拷貝至另一處即可。
.git目錄結構
$ ls -f1view codehead
config*description
hooks/
info/objects/refs/
注:ls -f1,-f引數好理解。哪個-1初次見還是很奇怪的,-1的意思是乙個檔案單獨顯示一行。
該目錄下可能還會包含其他檔案(比如index檔案),不過對於乙個全新的 git init 版本庫,這將是你看到的預設結構。
description 檔案:僅供 gitweb 程式使用,我們無需關心。
config 檔案:包含專案特有的配置選項。
head 檔案:指示目前被檢出的分支;
index 檔案:儲存暫存區資訊。
objects 目錄:儲存所有資料內容
refs 目錄:儲存指向資料(分支)的提交物件的指標
info 目錄:包含乙個全域性性排除(global exclude)檔案,用以放置那些不希望被記錄在 .gitignore 檔案中的忽略模式(ignored patterns)
hooks 目錄:包含客戶端或服務端的鉤子指令碼(hook scripts)
git objets
參考:
git內部原理淺見
git物件儲存 git引用 包檔案git gc git是版本管理工具 git是內容定址檔案系統,其核心部分是乙個簡單的鍵值對資料庫 key value index 通過sha 1雜湊值來查詢對應的原資料 git儲存的是快照 每次commit都會儲存整個專案的檔案資料,如果檔案沒有修改則儲存指向原檔案...
Git 內部原理之 Git 物件雜湊
git中的資料物件 樹物件和提交物件的hash方法原理是一樣的,可以描述為 header content.length 0 hash sha1 header content 上面公式表示,git在計算物件hash時,首先會在物件頭部新增乙個header。這個header由3部分組成 第一部分表示物件...
libvirt內部原理
1 什麼是libvirt,它的功能有哪些?libvirt 是管理虛擬機器和其他虛擬化功能,比如儲存管理,網路管理的軟體集合。這 些軟體包括乙個api 庫 乙個daemon libvirtd 和乙個命令列工具 virsh the goal of libvirt to provide a common ...