git如何区分deltified pack记录类型?

时间:2018-02-08 13:58:44

标签: git

在包文件中有记录,根据this帖子,其中包含存储在标题中的类型以及其他一些元数据。

查看JGit source我可以看到以下值。

  • 0 - EXTENDED
  • 1 - COMMIT
  • 2 - TREE
  • 3 - BLOB
  • 4 - TAG
  • 5 - 保留
  • 6 - OFS_DELTA
  • 7 - REF_DELTA

但是,如果对象被分层,那么标题中的类型将被设置为6或7,之后似乎没有添加的标题显示有效负载的类型,只是获取原始的一些方法然后增量数据。

git如何判断一个deltified pack记录的类型,以便它不会混淆类型?

1 个答案:

答案 0 :(得分:2)

根据设计,Git不存储不同类型对象的增量。您可以在文件Documentation/technical/pack-heuristics.txt中使用Git源代码提供的冗长描述/讨论中找到对此的确认。

  

< gitster> (...)这意味着:

     
      
  • 我们不会增加不同的对象类型。
  •   
  • (...)
  •   

因此,您可以从以下方式推断对象类型:

  • REF_DELTA:由包文件条目的前20个字节引用的对象
  • OFS_DELTA:一个包中较早的对象占用位置(Documentation/technical/pack-format.txt中的更多详细信息)