3 回答

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