禁用Cargo中的注册表更新

时间:2015-06-24 14:16:52

标签: rust-cargo

如何禁止cargo updatecargo 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。有没有选项,货物仍然可以下载所需的包,而无需更新它的注册表?

3 个答案:

答案 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"

有几点需要注意:

  1. 镜像包的实际内容。那些来自不同的主人。然而,我不知道如何反映这些:货物在本地缓存这些货物要好得多。它足够cargo fetch个包,然后复制*.crate中的缓存$HOME/.cargo/registry/cache/*文件。

  2. 这会导致Cargo.lock文件中的包标识符发生更改。这不是开发库的问题,但 会成为二进制文件的问题。标准做法是检查Cargo.lock进入二进制文件的源代码控制,以便下游的每个人都使用完全相同的软件包版本。但是,修改后的索引意味着没有其他人能够使用该锁定文件构建包。

    我通过在二进制包中放置另一个配置覆盖来解决这个问题,将二进制包中的索引重置为"官方"一,但在你的情况下甚至可能不可能。在这种情况下,您可能需要从源代码管理中排除Cargo.lock,或者只是让"不使用官方索引"分支。

答案 1 :(得分:0)

遗憾的是,cargo 仅支持 --offlineconfignet.offline。 此标志添加在 this PR 中。

答案 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