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 は、それらをローカルにキャッシュすることについてはるかに優れています。パッケージ化してから、キャッシュされたファイルを にコピーするだけで十分なはずです。cargo fetch
*.crate
$HOME/.cargo/registry/cache/*
これにより、ファイル内のパッケージ識別子がCargo.lock
変更されます。これはライブラリの開発では問題になりませんが、バイナリでは問題になります。標準的な方法は、バイナリのソース管理にチェックインしてCargo.lock
、ダウンストリームの全員がまったく同じパッケージ バージョンでビルドできるようにすることです。ただし、変更されたインデックスは、他の誰もそのロック ファイルを使用してパッケージをビルドできないことを意味します。
インデックスを「公式」のものにリセットするバイナリパッケージ内に別の構成オーバーライドを配置することでこれを回避しましたが、それはあなたの状況では不可能かもしれません. その場合、Cargo.lock
ソース管理から除外するか、「公式インデックスを使用しない」ブランチを作成する必要があります。