WinXP 32位下Mercurial 5.9.3的zstd压缩特性不可用如何解决
WinXP环境Mercurial支持zstd特性/仓库降级解决方案
方案一:修复WinXP下zstd扩展加载问题
你遇到的zstd已注册但不可用的核心原因是官方发布的TortoiseHg 5.9.3内置的mercurial.zstd.pyd编译时依赖了Vista及以上系统API,不兼容WinXP,你自行替换的普通Python2.7的zstd.pyd通常也默认针对NT6以上系统编译,无法被正常加载。
- 解决方法:搜索下载专门为32位WinXP编译的Python2.7版本zstd扩展,替换TortoiseHg安装目录下的
mercurial.zstd.pyd即可;也可以直接使用第三方修改的支持WinXP的TortoiseHg 5.9.x版本,这类版本已经提前集成了兼容XP的zstd扩展。
方案二:在Win10环境正确降级仓库取消zstd依赖
你之前的降级操作无效的原因有两个:一是你在不支持zstd的WinXP环境操作,Mercurial根本无法正常读取仓库元数据;二是仅添加revlog-compression-zstd = no仅会禁止后续写入使用zstd,不会主动转换已经生成的zstd压缩的历史数据。
正确操作步骤如下(所有操作在Win10的高版本Mercurial环境执行):
- 将整个仓库复制到Win10环境,确认可以正常执行hg命令
- 编辑仓库内
.hg/hgrc文件,添加如下配置:
[format] revlog-compression = zlib revlog-compression-zstd = no
- 执行强制转换命令:
hg debugupgraderepo --run --force - 转换完成后执行
hg debugrequires,确认输出中没有revlog-compression-zstd字段,再将转换后的仓库复制回WinXP环境即可正常使用。
方案三:小仓库快速迁移方案
如果仓库体积不大,可以用bundle导出导入的方式快速完成格式转换:
- 在Win10环境的仓库目录下执行导出命令:
hg bundle --all --type v2-zlib repo.hg - 将导出的
repo.hg文件复制到WinXP环境 - 在WinXP环境新建空仓库:
hg init new_repo cd new_repo hg unbundle ../repo.hg hg update
内容的提问来源于stack exchange,提问作者Pastagod
相关产品推荐
相关产品推荐

