如何在另一台计算机上回退cabal update至指定Hackage状态
解决方案
任务1:查看机器B的Hackage索引状态
有两种可靠方式获取机器B当前使用的Hackage快照状态:
查看索引时间戳文件
在机器B上执行以下命令,直接读取Hackage索引的更新时间:cat ~/.cabal/packages/hackage.haskell.org/timestamp输出格式类似
2024-05-20T12:34:56Z,这就是机器B当前依赖的Hackage快照时间点。查看索引哈希值
如果需要更精确的校验(避免时间戳可能的误差),可以读取索引文件的哈希:cat ~/.cabal/packages/hackage.haskell.org/00-index.tar.gz.hash输出是一串SHA256哈希值,代表该快照的唯一标识。
任务2:将机器A的Cabal索引同步至机器B的状态
拿到机器B的时间戳或哈希后,在机器A上执行对应命令强制同步到指定快照:
方式1:使用时间戳同步
将命令中的时间替换为机器B获取到的timestamp值:
cabal update --index-state='2024-05-20T12:34:56Z'
方式2:使用哈希值同步
如果时间戳不够精确,用机器B拿到的哈希值替换:
cabal update --index-state=sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
执行后,机器A的Cabal索引会同步到机器B的旧Hackage状态,之后编译项目时就能使用和B一致的包版本集合。
注意:Cabal 3.6+支持
--index-state参数直接用于update命令,无需额外配置文件。如果后续需要固定这个状态,可以在项目的cabal.project文件中添加index-state: 2024-05-20T12:34:56Z,避免后续cabal update自动覆盖。
内容的提问来源于stack exchange,提问作者user855443
相关产品推荐
相关产品推荐

