Git底層原理和結構

2021-10-06 04:14:29 字數 1744 閱讀 1763

基礎

一、資料結構

git object

1. blob物件

echo "contents" > a.txt會在工作目錄建立a.txt,寫入contents。即在資料結構中建立blob物件節點。

echo "222" | git hash-object -w --stdin會返回儲存在git庫中的唯一鍵。(-w 選項會指示該命令不要只返回鍵,還要將該物件寫入資料庫中。)

git會根據檔案內容生成校驗和(sha-1雜湊值,40位),以校驗和為索引。

將待儲存的資料外加乙個頭部資訊(header)一起做 sha-1 校驗運算而得的校驗和。

sha-1演算法(secure hash algorithm 1):一種密碼雜湊函式。

git cat-file -t 前六位雜湊可以讓 git 告訴我們其內部儲存的任何物件型別,只要給定該物件的 sha-1 值。

git cat-file -p 前六位雜湊檢視檔案內容

blob資料物件中,並沒有儲存檔名,僅儲存了檔案內容。

為什麼要把檔案的許可權和檔名儲存在tree object 里面而不是blob object呢?

節省空間,因為相同的檔案內容在git倉庫里面只有乙個blob object, 不管有多少個指標指向他。

2. tree物件

3. commit物件

也可以通過git命令建立blob,tree,commit物件,建立他們的指向關係,不需要借助上層命令(git add/commit),同樣可以提交檔案。

git 內部原理 - git 物件

總結,blob型別只是儲存檔案的內容,不包括檔名等其他資訊。將這些資訊經過sha1雜湊演算法得到對應的雜湊值,作為這個object在git倉庫的唯一標識。tree物件

二、執行命令時的結構變化

新建檔案後,git會建立blob object:

修改本地檔案

常用命令及結構變化

git reset:回滾,會移動head和master。

checkout和reset區別:

git reset soft,hard,mixed之區別深解

git revert:撤銷乙個提交的同時會建立乙個新的提交。這是乙個安全的方法,因為它不會重寫提交歷史。比如,git revert head~2會找出倒數第二個提交,然後建立乙個新的提交來撤銷這些更改,然後把這個提交加入專案中。

其他命令

三、分支合併

四、實用技巧

Git 底層原理

二.git 目錄結構 三.git add 與 git commit 簡單原理 四.建立與合併分支簡單原理 五.git rebase 簡單原理 六.開始從底層入手 git 七.git add 命令底層原理 八.git add 和 git commit 中間的操作 tree 物件的生成 九.git co...

GIT底層原理(一)

暫存操作會對先每乙個檔案計算校驗和checksum git 使用sha 1 演算法計算資料的校驗和,通過對檔案的內容或目錄的結構計算出乙個sha 1 雜湊值,作為指紋字串,該字串由40 個十六進製制字元,並將此結果作為資料的唯一標識和索引 然後把當前版本的檔案快照儲存到本地git 倉庫中 git 使...

git底層原理(二)

git物件模型 在git系統中有四種型別的物件,所有的git操作都是基於這四種型別的物件 blob 這種物件用來儲存檔案的內容。tree 可以理解成乙個物件關係樹,它管理一些 tree 和 blob 物件。commit 指向乙個 tree 它用來標記專案某乙個特定時間點的狀態。它包括以下關於時間點的...