我如何通过 git 依赖 Cargo 工作区中的 crate?

Sim*_*ine 9 git rust rust-cargo

给定一个 git 存储库中的Cargo 工作区,其中包含一个 cratefoo以及bar该工作区之外的另一个 crate,我如何依赖fooin bar?如果foo只是一个常规的 crate-within-a-git-repo,则可以执行以下操作:

foo = { git = "ssh://git@server/some/foo.git", ... }
Run Code Online (Sandbox Code Playgroud)

如果foo位于 Cargo 工作空间内并且它位于本地目录中,则以下内容有效:

foo = { path = "../../some-workspace/foo" }
Run Code Online (Sandbox Code Playgroud)

但是使用git = "ssh://..."它指向包含 Cargo 工作区的存储库,我无法foo特别指定该箱子。

不可能组合git = "..."path = "...",因为它们是互斥的。

在The Cargo Book 的指定 git 存储库的依赖项中,它提供了branch = "..."tag = "..."rev = "...",但没有“子箱的目录名称,即箱的名称”。Cargo.toml 中的重命名依赖项package = "..."下提到了一个说明符,用于将箱子导入为其他东西。但它似乎并没有兼作工作空间内的 crate 说明符。

Dig*_*ata 10

您的依赖项名称应该包含工作区中 crate 的名称。货物将搜索它。假设工作区 foo 内有 crate bar。

bar = { git = "ssh://git@server/some/foo.git", ... }
Run Code Online (Sandbox Code Playgroud)

不确定这在哪里记录,但这里有一个讨论:

https://github.com/rust-lang/cargo/issues/10151