3 回答

TA貢獻2039條經驗 獲得超8個贊
索引是一個二進制文件(通常保存在 .git/index
)包含一個排序的路徑名稱列表,每個路徑名稱都具有權限和BLOB對象的SHA 1; git ls-files
可以顯示索引的內容:
$ git ls-files --stage 100644 63c918c667fa005ff12ad89437f2fdc80926e21c 0 .gitignore 100644 5529b198e8d14decbe4ad99db3f7fb632de0439d 0 .mailmap
索引是GIT中最重要的數據結構之一。 它通過記錄路徑及其對象名稱的列表來表示虛擬工作樹狀態,并充當一個臨時區域來寫出要提交的下一個樹對象。 狀態是“虛擬的”,因為它不一定要,而且通常不匹配工作樹中的文件。
Git索引文件具有以下格式
所有二進制數字都是按網絡字節順序排列的。
第2版在此說明,除非另有說明。
由以下內容組成的12字節頭:
4字節 簽名:
簽名是{‘
D
', 'I
', 'R
', 'C
)(代表“
dircache
")4字節 版本號:
當前支持的版本是2、3和4。 索引條目的32位數。 若干排序
索引條目 .擴展:
擴展是通過簽名標識的。
如果Git不理解它們,則可以忽略可選擴展。
GIT目前支持緩存樹和解析撤消擴展。
4字節擴展簽名。如果第一個字節是‘
A
'..'Z
‘擴展是可選的,可以忽略。 擴展的32位大小 擴展數據 在此校驗和之前,160位SHA-1超過索引文件的內容.
如果索引是準備下一次提交的地方,為什么沒有“ git ls-files -s
“提交后什么也不歸還?
git diff --cached
git ls-files -s
benpeart
).pclouds
).gitster
--
增加索引條目偏移表(IEOT)擴展
此修補程序通過向索引中添加額外的數據來解決加載索引的CPU成本,這將使我們能夠高效地多線程加載和轉換緩存條目。
它通過向索引文件中的緩存條目塊添加一個(可選的)索引擴展來實現這一點。
為了實現V4索引的工作,在編寫緩存條目時,它會周期性地“重置”前綴-通過對當前條目進行編碼來進行壓縮,就好像前面條目的路徑名稱完全不同一樣,并將該條目的偏移量保存在IEOT中。 基本上,使用V4索引,它會將偏移生成前綴壓縮條目塊.
read-cache.c load_cache_entries_threaded()
peff
).gitster
--
讀取-緩存:從線程加載中刪除未使用的參數。
這個 load_cache_entries_threaded()
函數采用 src_offset
參數不使用的參數。它自成立以來就一直存在。 77ff112 (read-cache
:在工作線程上加載緩存條目,2018-10-10,Git v2.20.0-rc0)。
深入了解郵件列表,該參數是 系列的早期迭代,但是當代碼切換到使用IEOT擴展時,就變得沒有必要了
- 3 回答
- 0 關注
- 491 瀏覽
添加回答
舉報