基礎
一、資料結構
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呢?2. tree物件節省空間,因為相同的檔案內容在git倉庫里面只有乙個blob object, 不管有多少個指標指向他。
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 它用來標記專案某乙個特定時間點的狀態。它包括以下關於時間點的...