Git Packfile中的疑惑

基於:https://git-scm.com/book/zh/v1/Git-內部原理-Packfiles
上面的鏈接中,介紹了Git Packfiles,主要講了一下三個知識點:

  • git push … | git gc
  • .git/objects/pack/[xxx.idx|xxx.pack]
  • git verify-pack xxx.idx

這裏記錄一下筆者對 pack/[xxx.idx|xxx.pack] 文件的內容的理解 和 疑惑

內容:

idx文件中的內容格式

  • SHA-1 type size size-in-packfile offset-in-packfile
  • SHA-1 type size size-in-packfile offset-in-packfile depth base-SHA-1:大文件小修改的情況下,增量信息的記錄

pack文件內容:

  • 12字節的Header信息
  • 緊湊的內容

疑惑:

idx內容的部分摘取

5f42296a81536eb4aff4d6a66dcd4b96331a043a commit 318 222 12
6f1403eb19b5e2bdc7ceb0bd411d0854580eae24 commit 316 209 234
9680fc801a6302a46cce0d299a960c2796ee21cd commit 832 637 443
191cfb3d1a952ec94d4d34fdc72c2c802462c02a commit 262 176 1080
1474b8b9bffc5e60255f62b43b08a575436b9fa8 commit 263 181 1256
8295fb9e82067a8635475950775cbc2455c8dfaa commit 258 181 1437
bb867dcca1d7fb5b8f3f53671b1a22139b367d9f commit 252 176 1618
524c9ca226c87bd251588f60023d4c8ee5d235ff commit 267 188 1794
f218cb6b88ab2cdc89cb1d6a9d95693a6501ab53 commit 274 191 1982
e9cf30f3e0487c355e7ca524a3a7a2f1e22c7454 commit 274 189 2173
341971a706afaa3ecd072ee43b9678df874b94dc commit 381 274 2362
7a8f064a810a06f8724db3fb3cfa41805a8c9cc5 commit 253 200 2636
ce7211a3a79f2f976d4b1a5e79f55c0fc64c49e6 commit 483 340 2836

從內容上看,記錄是按照git commit tree的關係記錄的
即 先記錄最新的commit,接着記錄該commit的parent節點(多parent不討論)

但是這樣以來,感覺上並 起不到索引的效果
筆者原先的猜想:

記錄按照 SHA256-ID 進行排序存儲 -> 查詢時 提供 SHA256-ID -> 二分查找

但是目前看來不是這樣的設計,也是疑惑不解。

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