git show-index输出的第3列是什么?

时间:2015-09-11 19:00:48

标签: git

当我使用git show-index时,我会得到类似的结果:

12 3efc399e3f684061ef13c5b7dfde66342ef23033 (44b2e14e)
218 53f4215e537f351457713ad4f18d6e5d5dedf333 (480e84f1)
422 b532ec8e8e38c52002e953c878010391245eaa84 (bbaa1b63)
625 bb4359ded039eefe9fab5c99f196c67ba1a9493e (68e4b84f)

根据手册页,前两个值是packfile中的偏移量和每个对象的sha1。但括号中的第三个值是什么?我无能为力。

3 个答案:

答案 0 :(得分:1)

以下是show-index.c的相应摘录:

        printf("%" PRIuMAX " %s (%08"PRIx32")\n",
               (uintmax_t) offset,
               sha1_to_hex(entries[i].sha1),
               ntohl(entries[i].crc));

这使得它看起来像第三列是对象的CRC,其哈希是第二列。

答案 1 :(得分:1)

version two packfiles开始,这是packfile数据的CRC32。

不是对象的CRC32 - 这将是冗余的,SHA1值就在那里 - 它是实际压缩(或deltafied)packfile数据的CRC32。这允许您从包文件中读取数据并验证它,无需解压缩或应用增量来重建完整对象。

答案 2 :(得分:1)

Git 2.19(2018年第三季度)为git show-index格式输出带来了更多细节,尤其是在index V2的上下文中。

指出commit 32637cdshow-index.c:了解索引v2, 2007年4月5日(Git v1.5.2)更改了show-index的输出格式以包含对象CRC32,但未更新文档。

请参见commit fb3010cJeff King (peff)(2018年5月28日)。
(由Jeff King -- peff --commit fb3010c中合并,2018年5月28日)

git show-index man page现在包括:

  

输出每行包含一个对象,每行包含两个或三个以空格分隔的列:

     
      
  • 第一列是相应包文件中对象的字节偏移量。

  •   
  • 第二列是对象的对象ID,

  •   
  • 如果索引版本为2或更高,则第三列包含对象数据的CRC32

  •