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 -> 二分查找

但是目前看来不是这样的设计,也是疑惑不解。

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