【问题标题】:Re-cloning a mercurial repository without generaldelta重新克隆没有 generaldelta 的 mercurial 存储库
【发布时间】:2024-07-17 00:40:01
【问题描述】:

我正在尝试在面向 Internet 的机器上创建 hg clone,以便以后在离线构建机器上使用。不幸的是 mercurial 在 Internet 机器上是 3.9.1,但在离线机器上是 1.4。

我收到错误 abort: requirement 'generaldelta' not supported!abort: requirement 'dotencode' not supported!

我发现这是因为在 1.9 中添加了 generaldelta 功能,在 1.7 中添加了 dotencode。我已使用来自 MissingRequirement wiki page 的说明使用以下内容降级此存储库。

hg clone -U --config format.generaldelta=0 --config format.dotencode=0 --pull /tmp/foo /tmp/bar

但是/tmp/bar 的新仓库仍然使用generaldelta,尽管dotencode 要求已经消失。即

cat /tmp/bar/.hg/requires 

fncache
generaldelta  <=== still there
revlogv1
store

store

如何在禁用 generaldelta 和 dotencode 的情况下重写 repo?

【问题讨论】:

  • 如果可能,您真的想从 1.9 升级 mercurial。那是一个非常旧的版本,从那时起,已经修复了大量错误并应用了性能改进。

标签: mercurial


【解决方案1】:

配置选项应该是format.usegeneraldelta 而不是format.generaldelta。即

hg clone -U --config format.usegeneraldelta=0 --config format.dotencode=0 --pull /tmp/foo /tmp/bar

注意配置。除了config.dotencode,选项都是config.use&lt;feature-name&gt;,见Mercurial format options。请注意,也没有任何错误检查。

【讨论】: