gpt4 book ai didi

Git Packfile 条目偏移量计算

转载 作者:IT王子 更新时间:2023-10-29 01:48:00 24 4
gpt4 key购买 nike

我正在尝试解释从 git-upload-pack 接收到的包文件。 git-upload-pack 不发送随附的索引,因为据说您可以从原始包文件中派生它,但我无法弄清楚包文件的格式是如何实现的。

git 技术文档说它有可变字节数指示条目大小,但这是条目的未压缩 大小,条目数据本身在打包文件中用 zlib 压缩. Go 的 zlib 实现是贪婪的,并使用我给它的 io.Reader 寻找数据的末尾,这意味着我不能相信它会在解压 block 后将 io.Reader 指针留在正确的位置。

我的第一个想法是在使用 compress/zlib 从包文件中读取压缩 block 之前取一个书签,读取后重置为书签,用相同的算法/压缩级别重新压缩未压缩的数据,这样我就知道了长度压缩数据,然后向前寻找那么远以获得下一个 block 的正确偏移量。

但是,重新压缩的数据似乎与原始压缩数据并不相同。为什么用相同的算法压缩相同的数据会产生不同的结果?有没有更好的方法来计算 git packfile 中条目的索引?

最佳答案

我以不同的方式解决了我的问题:我修改了 compress/zlib 以公开来自 zlib 阅读器的摘要。解压缩后,我在原始 io.ReadSeeker 中向后查找,以找到用作压缩数据校验和的 4 字节摘要,以便我知道压缩数据流的末尾在哪里。

不过,对于为什么 git 和 Go 的 zlib 算法会在相同的压缩级别下产生不同的结果,我仍然没有答案。

关于Git Packfile 条目偏移量计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35258001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com