当我使用git show-index
时,我会得到类似的结果:
12 3efc399e3f684061ef13c5b7dfde66342ef23033 (44b2e14e)
218 53f4215e537f351457713ad4f18d6e5d5dedf333 (480e84f1)
422 b532ec8e8e38c52002e953c878010391245eaa84 (bbaa1b63)
625 bb4359ded039eefe9fab5c99f196c67ba1a9493e (68e4b84f)
根据手册页,前两个值是packfile中的偏移量和每个对象的sha1。但括号中的第三个值是什么?我无能为力。
答案 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 32637cd(show-index.c
:了解索引v2,
2007年4月5日(Git v1.5.2)更改了show-index
的输出格式以包含对象CRC32,但未更新文档。
请参见commit fb3010c的Jeff King (peff
)(2018年5月28日)。
(由Jeff King -- peff
--在commit fb3010c中合并,2018年5月28日)
输出每行包含一个对象,每行包含两个或三个以空格分隔的列:
第一列是相应包文件中对象的字节偏移量。
第二列是对象的对象ID,
如果索引版本为2或更高,则第三列包含对象数据的CRC32