我想根据2017年2月22日提供的内容,在Cargo.toml的Rust项目中创建一个Cargo.lock文件。我需要让版本选择与特定日期发生的版本兼容。 (不,不要在某处控制Cargo.lock版本。)
我试过这个无济于事:
在.cargo / config中使用以下行:
[source.mycrates]
registry = "file:///path/to/crates.io-index" # contains old checkout
[source.crates-io]
replace-with = "mycrates"
尽管如此,货物将Cargo.toml中的依赖关系解析为可用的最新版本,而不是指定结帐中的最新版本。
我怎样才能及时扭转Cargo的版本选择?
答案 0 :(得分:1)
既然你说你已经尝试过克隆索引,我会假设你仍然躺在那里。为了其他读者的利益,存储库似乎在Git中维护,可以在https://github.com/rust-lang/crates.io-index获得。
您需要告诉cargo
与--frozen
一起运行,以便它不会触及网络q.v. Cargo FAQ,如果它认为需要,它会爆炸。如果它已经下载了东西,你也需要cargo clean
,或者以其他方式核对缓存。
如果您还没有结帐时需要的所有软件包,则还需要下载您感兴趣的特定版本。Dissecting Crates.io: Bare Minimum Mirror有一个解释,我将在此总结如果链接爆炸。
Crates repo根目录中的
config.json
有下载包的URL,这些URL被官方认为不稳定,但现在可以使用。“gmjosack”使用的
libc
包中的示例根据/api/v1/crates/libc/0.1.10/download
中dl
的{{1}}键显示了https://crates.io/api/v1/crates
下载它的路径1}}以及帖子发布时的版本。
您可能需要编写下载脚本以构建镜像。另请参阅:stackoverflow上的Downloading Rust crates using a web browser。