sisong / HDiffPatch

a C\C++ library and command-line tools for Diff & Patch between binary files or directories(folder); cross-platform; runs fast; create small delta/differential; support large files and limit memory requires when diff & patch.
Other
1.52k stars 280 forks source link

HDiffPatch差分打包好的.zip文件 #382

Closed xiayuxixi closed 3 months ago

xiayuxixi commented 3 months ago

作者你好,就是我在差分几个镜像文件,一起打包成一个.zip文件时的效果并不好。差分率很低,但是我还原的时候也是需要这几个差分的补丁一起去还原一个零件。请问一下作者那么这种情况我该怎么差分呢

sisong commented 3 months ago

“还原一个零件” 为什么是多个补丁去还原一个,不是太理解你的场景;
另外,补丁包大推荐直接用-c-zstd压缩补丁包。 如果 镜像文件 本身是某种压缩格式,那补丁包确实会比较大,因为hdiffpatch并不会自动在解压状态执行diff。

xiayuxixi commented 3 months ago

抱歉,我没有表述清楚,我的意思就是我们的实际应用场景就是同时差分几个镜像文件,旧包就是这几个镜像文件是打包成的一个.zip的压缩包,新包也是这几个镜像文件的新包打包成的.zip的文件。然后差分这两个.zip的文件,生成一个差分包。 现在就是用公司的代码差分出来,压缩率只有10几,是不是就是不能同时差分多个包,打包成.zip的原因呀。还是得一个一个镜像去差分这种吗

sisong commented 3 months ago

压缩算法(或者加密算法)都很可能会破坏或放大数据修改信息,造成补丁包快速增大。
diff前最好不要压缩,比如是否可以不压缩成zip而是直接对镜像文件进行diff,或者是否可以将打zip包格式改成输出tar包格式(有同学是这样弄的)?
如果必须是zip包,那可以考虑我开源的apkdiffpatch项目,它对zip文件格式进行了优化处理,得到更小的补丁包,不过各种代价成本可能比较高,需要分析是否适合你的场景。 我的另外一个sfpatcher商业项目也是类似的一个优化项目。

xiayuxixi commented 3 months ago

谢谢作者的耐心解答,我都试试吧~