以戰代練 Git內幕研究(一)

1,plumbing
2,.git目錄結構

– 一般
description 一般都是描述,不是很重要
config git項目的所有配置項
info 包含了我們不需要git追蹤的排除掉的文件(exclude)
hooks 鉤子,配合自動部署/自動構建
– 重要
head 指向了我們當前所處的分支指針
index 存儲了暫存區的內容
objects 存儲了git中所有的數據
refs 存儲了所有的指針(包括branch、tag、remote)

3,底層命令

(1)git hash-object #接受一個value,然後返回SHA-1 hash值(40位)
例如:
echo ‘hello’ | git hash-object -w --stdin
如果不加–stdin的話,就要加上一個文件名

(2)git存儲機制:
40位hash值,前2位作爲文件夾名稱,後38位作爲文件名

(3)git cat-file #查看存儲到git中的文件內容
例如:
git cat-file -p 38位hash值 #查看存儲文件內容
git cat-file -t 38位hash值 #查看存儲文件類型,blob類型
git cat-file -p master^{tree}

(4)find .git/objects -type f #查看.git/object中的所有文件

(5) git update-index --add --cacheinfo 100644 40位hash值 文件名
例如:
git update-index --add --cacheinfo 100644 83bddddd… test.txt
解釋:
git update-index #將數據庫中存儲的某個blob數據的引用放到暫存區中
–add #因爲暫存區中沒有這個文件
–cacheinfo #不是從工作區中加入文件,是從git倉庫(git數據庫)加入文件
100644 #表示這是一個普通的文件

(6)git write-tree
創建一個tree object,將數據庫內容的引用放入到暫存區

相當於基於暫存區中當前所有文件的版本(引用),創建一個快照

(7)git commit-tree
會生成一個commit object
commit object 包含:tree object、作者、提交人、備註等信息
可以理解爲tree object就是項目當前的一個完整快照

(8)總結:
git add --add . === git update-index
git commit === git write-tree && git commit-tree

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章