问题 禁用Cargo中的注册表更新


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


1036
2018-06-24 14:16


起源

“工作中阻止了github.com“这真令人沮丧。 - Shepmaster
告诉我怎么回事儿。 - Ronnie
块的性质是什么? DNS,IP? - Chris Morgan
都。我需要git才能下载crates.io-index!我必须在家里把它送到自己身边 - Ronnie
@Ronnie:我没有提出解释为什么他们会阻止github.com。他们为什么这样? - Chris Morgan


答案:


如果你看一下文档 配置货物,你会注意到有一个 index 关键在于 [registry] 部分。这可以是Git存储库的任何路径。

因此,您可以创建crates.io索引的本地克隆。我通过克隆它来证实这一点:

git clone --bare https://github.com/rust-lang/crates.io-index.git

然后编辑我的货物配置(具体来说,我改变了 ~/.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 从源代码控制,或只是有一个“不使用官方索引”分支。


14
2018-06-24 14:36



或者,如果您可以通过IP地址访问GitHub,也许您可​​以将其更改为 https://192.30.252.131/rust-lang/crates.io-index.git。你需要 GIT_SSL_NO_VERIFY=true 然而,在你的环境中,这是一个坏主意。或者,像 stackoverflow.com/a/3777141/497043。 - Chris Morgan