如何告诉 Cargo 使用 git 存储库作为间接依赖项的源而不是 crates.io?

问题描述 投票:0回答:1

几天前,通过 Emscripten 交叉编译为 JavaScript 终于每晚实现了。我想以这种方式使用

glium
编译一个项目。然而,许多 crate 中仍然存在许多与 Emscripten 相关的 bug。虽然维护人员通常会快速修复这些错误,但他们不一定会立即将这些错误修复发布到 crates.io

就我而言,

glium
取决于
glutin
glutin
有一个错误,现已修复,但仅限于 git 存储库,而不是
crates.io
注意
glutin
不是我的项目的直接依赖项;只有间接的通过
glium

我如何告诉 Cargo 使用

glutin
存储库 作为
glutin
而不是
crates.io
的源?

rust rust-cargo
1个回答
15
投票

您可以在项目的 [replace]

 中使用 
Cargo.toml
 部分
。您可以在 Cargo 文档中找到有关该功能的文档。

就您而言,

glium
取决于
glutin 0.6.1
。 crates.io 上的版本
0.6.1
仍然包含该错误。所以只需将其添加到您的
Cargo.toml
:

[replace]
"glutin:0.6.1" = { git = 'https://github.com/tomaka/glutin' }

但是请注意,

[...] 替换的 crate 不仅必须具有相同的名称,而且必须具有相同的版本。

但即使在版本不匹配的情况下(存储库已经包含较新的版本),如果板条箱的维护者为每个版本创建 git 标签(Rust 社区中的许多人都这样做),您仍然会很幸运。在这种情况下,您只需指定标签即可:

[replace]
"glutin:0.6.1" = { 
    git = 'https://github.com/tomaka/glutin' 
    tag = 'v0.6.1'
}

遗憾的是,这不适用于

glutin
,因为维护者没有为每个版本创建标签。在这种情况下,您可以简单地找到版本更新之前的最后一次提交,并使用
rev = 'b4a3d0...'
指定它,或使用
branch = '...'
键指定特定分支。


[replace]
部分已被弃用,取而代之的是
[patch
]。现在看起来是这样的:

[patch.crates-io]
glutin = { git = 'https://github.com/tomaka/glutin' }
© www.soinside.com 2019 - 2024. All rights reserved.