亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

git索引到底包含什么?

git索引到底包含什么?

Git
拉莫斯之舞 2019-08-03 03:03:11
git索引到底包含什么?Git索引到底包含什么,我可以使用什么命令來查看索引的內容?更新謝謝你的回答。我知道索引充當一個分階段區域,提交的內容是在索引中而不是在工作樹中。我只是好奇索引對象是由什么組成的。我想可能是一個文件名/目錄名的列表,SHA-1對,可能是一種虛擬樹?用Git術語來說,有沒有管道命令,可以用來列出索引的內容嗎?
查看完整描述

3 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

Git書中有一篇關于索引包括什么?:

索引是一個二進制文件(通常保存在.git/index)包含一個排序的路徑名稱列表,每個路徑名稱都具有權限和BLOB對象的SHA 1;git ls-files可以顯示索引的內容:

$ git ls-files --stage
100644 63c918c667fa005ff12ad89437f2fdc80926e21c 0   .gitignore
100644 5529b198e8d14decbe4ad99db3f7fb632de0439d 0   .mailmap

這個活潑的Git問題給出了關于該結構的更多細節:

索引是GIT中最重要的數據結構之一。
它通過記錄路徑及其對象名稱的列表來表示虛擬工作樹狀態,并充當一個臨時區域來寫出要提交的下一個樹對象。
狀態是“虛擬的”,因為它不一定要,而且通常不匹配工作樹中的文件。


想看更多,參考文獻?!?/trans>git/Documentation/technical/index-format.txt":

Git索引文件具有以下格式

所有二進制數字都是按網絡字節順序排列的。
第2版在此說明,除非另有說明。

  • 由以下內容組成的12字節頭:
    • 4字節

      簽名:

      簽名是{‘

      D', 'I', 'R', 'C

      )(代表“

      dircache")

    • 4字節

      版本號:

      當前支持的版本是2、3和4。
    • 索引條目的32位數。
  • 若干排序

    索引條目.

  • 擴展:

    擴展是通過簽名標識的。


    如果Git不理解它們,則可以忽略可選擴展。


    GIT目前支持緩存樹和解析撤消擴展。
    • 4字節擴展簽名。如果第一個字節是‘

      A'..'Z

      ‘擴展是可選的,可以忽略。
    • 擴展的32位大小
    • 擴展數據
  • 在此校驗和之前,160位SHA-1超過索引文件的內容.

mljrg 評論意見:

如果索引是準備下一次提交的地方,為什么沒有“git ls-files -s“提交后什么也不歸還?

因為索引表示正在跟蹤的內容。,在提交之后,正在跟蹤的內容與最后一次提交相同(git diff --cached什么也不回)。

所以git ls-files -s列出跟蹤的所有文件(輸出中的對象名稱、模式位和階段號)。

這個列表(跟蹤的元素)是用提交的內容初始化的。
切換分支時,索引內容將重置為剛剛切換到的分支引用的提交。


GIT2.20(2018年Q4)增加了一個索引項偏移表(IEOT):

看見提交77f 112承諾3255089提交abb4bb8提交c 780b9c提交3b1d9e0承諾371 ed0d(2018年10月10日)本·皮爾特benpeart).
看見提交252 d079(2018年9月26日)?n Thái Ng?c Duy(pclouds).
(合并為Junio C Hamano-gitster --在……里面提交e27bfaa,2018年10月19日)

增加索引條目偏移表(IEOT)擴展

此修補程序通過向索引中添加額外的數據來解決加載索引的CPU成本,這將使我們能夠高效地多線程加載和轉換緩存條目。

它通過向索引文件中的緩存條目塊添加一個(可選的)索引擴展來實現這一點。

為了實現V4索引的工作,在編寫緩存條目時,它會周期性地“重置”前綴-通過對當前條目進行編碼來進行壓縮,就好像前面條目的路徑名稱完全不同一樣,并將該條目的偏移量保存在IEOT中。
基本上,使用V4索引,它會將偏移生成前綴壓縮條目塊.

帶著新的index.linesconfig設置,索引加載速度更快。


因此(使用IEOT), 提交7bd9631清理read-cache.c load_cache_entries_threaded()Git 2.23(Q3 2019)的職能。

看見承諾8373037提交d713e88提交d 92349d承諾113 c29a提交c95fc72提交7a2a721提交C 016579提交為27fb7實施13a1781提交7bd9631提交3c1dce8提交cf7a901提交d64db5b提交76a7bc0(2019年5月9日)杰夫·金(peff).
(合并為Junio C Hamano-gitster --在……里面提交c0e78f7,2019年6月13日)

讀取-緩存:從線程加載中刪除未使用的參數。

這個load_cache_entries_threaded()函數采用src_offset參數不使用的參數。它自成立以來就一直存在。77ff112 (read-cache:在工作線程上加載緩存條目,2018-10-10,Git v2.20.0-rc0)。

深入了解郵件列表,該參數是系列的早期迭代,但是當代碼切換到使用IEOT擴展時,就變得沒有必要了


查看完整回答
反對 回復 2019-08-05
  • 3 回答
  • 0 關注
  • 491 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號