最近由于需要远程进行开发联调,经常需要外发联调版本镜像。
这些镜像动辄数百兆,奈何网络质量堪忧,传输这些镜像成为整个流程最大的阻塞点。
为了减小镜像文件的大小,使用了 bsdiff
工具制作差分包,因为本身改动很小,可以实现将几百兆的文件差分为几兆的差分包,大大加速版本传输。
但使用 bsdiff
仍然有个痛点:生成差分包太慢了,几百兆的镜像需要十几分钟。
忍无可忍无需再忍,找到了它的替代工具:大名鼎鼎的 Zstd
,它也能制作差分包,并且速度和质量直接秒杀 bsdiff
。
网上使用 bsdiff
的人多,使用 Zstd
的人少,写篇笔记记录一下用法。
bsdiff/bspatch
download
https://github.com/reitowo/bsdiff-win/releases
官方没有 Windows 直接可运行的二进制,这是三方编译的 Windows 可运行版本,如有需要可自行编译。
patch
bsdiff.exe oldfile newfile patchfile
apply
bspatch.exe oldfile newfile patchfile
Zstd
download
https://github.com/facebook/zstd/releases/
zstd
是静态编译的,实际使用时只需要这一个程序文件就可以了。
patch
zstd.exe --patch-from=<oldfile> <newfile> -o <patchfile>
实测文件大于
2G
不支持:zstd: error 42 : Can't handle files larger than 2 GB
作者通过修改源码,搞了一个解除2G
文件支持的版本:有需要请移步
apply
zstd.exe -d --patch-from=<oldfile> <patchfile> -o <newfile>
原始文件太大可能会报错
Window size larger than maximum
,按照提示加优化参数再次调用即可。
会推荐使用--long=31
参数。