如何禁止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。有没有选项,货物仍然可以下载所需的包,而无需更新它的注册表?
答案 0 :(得分:14)
如果您查看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
,或者只是让"不使用官方索引"分支。
答案 1 :(得分:0)
答案 2 :(得分:0)
由于 registry.index 配置值不再受支持, 我可以替换官方 crates.io 注册表使用添加这个 我的项目中的 .cargo/config 文件 (或在 $CARGO_HOME%\.cargo 下):
[source]
[source.mirror]
registry = "http://localhost:8185/auser/crates.io-index.git"
[source.crates-io]
replace-with = "mirror"
也可以使用基于文件的 git 注册表克隆:
registry = "file://c:/github/crates.io-index.git"
使用 git clone --bare 或 --mirror 下载
货物建造现在打印
Updating 'c:\github\crates.io-index.git' index
而不是 Updating crates.io index