如何禁用 cargo update
或 cargo build
试图访问 github.com;但仍然从 crates.io
下载适当的包
我的cargo.toml 中只有一个依赖项
[dependencies]
chrono = "0.2.14"
运行
cargo build
E:\>cargo build
Updating registry `https://github.com/rust-lang/crates.io-index`
Unable to update registry https://github.com/rust-lang/crates.io-index
我们是 屏蔽 来自工作中的 github.com 但不是 crates.io。有没有一个选项让 cargo 仍然可以下载它需要的包而无需更新它的注册表?
最佳答案
如果您查看 configuring Cargo 的文档,你会注意到有一个 index
关键在 [registry]
节。这可以是 Git 存储库的任何路径。
因此,您可以制作 crates.io 索引的本地克隆。我通过像这样克隆它来验证这一点:
git clone --bare https://github.com/rust-lang/crates.io-index.git
然后编辑我的 Cargo 配置(具体来说,我更改了
~/.cargo/config
,但这应该适用于文档描述的任何地方)以包含:[registry]
index = "file:///F:/Data/Repositories/crates.io-index.git"
需要注意的几点:
cargo fetch
应该够了包,然后复制缓存的 *.crate
$HOME/.cargo/registry/cache/*
中的文件. Cargo.lock
中出现包标识符。要更改的文件。这对于开发库来说不是问题,但对于二进制文件来说确实是个问题。标准做法是检查您的 Cargo.lock
进入二进制文件的源代码控制,以便下游的每个人都使用完全相同的包版本进行构建。但是,修改后的索引意味着没有其他人能够在该锁定文件就位的情况下构建包。我通过在二进制包中放置另一个配置覆盖来解决这个问题,将索引重置为“官方”,但这在您的情况下甚至可能是不可能的。在这种情况下,您可能需要排除
Cargo.lock
来自源代码管理,或者只是有一个“不使用官方索引”的分支。 关于rust-cargo - 在 Cargo 中禁用注册表更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31029095/