12

無効にする方法cargo update、またはcargo buildgithub.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 からはブロックされていませんレジストリを更新せずに、貨物が必要なパッケージをダウンロードできるオプションはありますか?

4

3 に答える 3

16

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 は、それらをローカルにキャッシュすることについてはるかに優れています。パッケージ化してから、キャッシュされたファイルを にコピーするだけで十分なはずです。cargo fetch*.crate$HOME/.cargo/registry/cache/*

  2. これにより、ファイル内のパッケージ識別子がCargo.lock変更されます。これはライブラリの開発では問題になりませんが、バイナリでは問題になります。標準的な方法は、バイナリのソース管理にチェックインしてCargo.lock、ダウンストリームの全員がまったく同じパッケージ バージョンでビルドできるようにすることです。ただし、変更されたインデックスは、他の誰もそのロック ファイルを使用してパッケージをビルドできないことを意味します。

    インデックスを「公式」のものにリセットするバイナリパッケージ内に別の構成オーバーライドを配置することでこれを回避しましたが、それはあなたの状況では不可能かもしれません. その場合、Cargo.lockソース管理から除外するか、「公式インデックスを使用しない」ブランチを作成する必要があります。

于 2015-06-24T14:36:55.410 に答える