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

时间:2016-10-16 13:37:42

标签: rust rust-cargo

A few days ago,通过Emscripten对JavaScript进行交叉编译终于在夜间播出。我想以这种方式使用glium编译项目。但是,许多板条箱中仍然存在许多与Emscripten相关的错误。虽然维护人员通常会快速修复这些错误,但他们不一定会立即将这些错误修复发布到crates.io

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

如何告诉Cargo使用the glutin repository作为glutin而不是crates.io 的来源?

1 个答案:

答案 0 :(得分:10)

您可以在项目的[replace]中使用 Cargo.toml部分。您可以找到有关该功能的文档here in the Cargo documentation

在您的情况下,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 = '...' 指定特定分支键。