如何在 Cargo 中使用相对 git 子模块路径?

Bru*_*ian 6 git git-submodules rust rust-cargo

我已经为 Rust 完成了一个 MuPDF 绑定,我想将它作为一个板条箱从它的 git 存储库中导入。

我的 Cargo.toml 文件是这样的:

[package]
name = "package_name"
version = "0.1.0"
authors = ["me"]

[dependencies]
mupdf-sys = {git = "https://github.com/bruno-sm/mupdf-sys.git"}
Run Code Online (Sandbox Code Playgroud)

问题在于 MuPDF 将其第三方库存储为具有相对路径的 git 子模块。这是 .gitmodules 文件的摘录:

[package]
name = "package_name"
version = "0.1.0"
authors = ["me"]

[dependencies]
mupdf-sys = {git = "https://github.com/bruno-sm/mupdf-sys.git"}
Run Code Online (Sandbox Code Playgroud)

当我运行时cargo build出现以下错误

[submodule "thirdparty/jbig2dec"]
    path = thirdparty/jbig2dec
    url = ../jbig2dec.git
[submodule "thirdparty/mujs"]
    path = thirdparty/mujs
    url = ../mujs.git
Run Code Online (Sandbox Code Playgroud)

这表明未指定 MuPDF 存储库的基本 URL,但它在文件中 .git/modules/mupdf/config

Updating git repository `https://github.com/bruno-sm/mupdf-sys`
error: failed to load source for a dependency on `mupdf-sys`                     

Caused by:
  Unable to update https://github.com/bruno-sm/mupdf-sys

Caused by:
  failed to update submodule `mupdf`

Caused by:
  failed to update submodule `thirdparty/curl`

Caused by:
  invalid url `../thirdparty-curl.git`: relative URL without a base
Run Code Online (Sandbox Code Playgroud)

用 克隆存储库没有问题git clone --recursive https://github.com/bruno-sm/mupdf-sys,所以我不知道问题出在哪里。

要重现该错误,您必须使用 创建一个新项目cargo new project_name,添加

[dependencies]
mupdf-sys = {git = "https://github.com/bruno-sm/mupdf-sys.git"}
Run Code Online (Sandbox Code Playgroud)

到 Cargo.toml 文件并运行cargo build.

要查看 MuPDF 存储库的内容,您可以使用 git clone --recursive git://git.ghostscript.com/mupdf.git

g19*_*tic -1

问题是 MuPDF 将其第三方库存储为具有相对路径的 git 子模块

因此,您需要在相对路径中提供这些存储库。将jbig2decmujs存储库克隆到文件下列出的相对位置.gitmodules。现在,当你这样做时,--recurse-submodules它应该可以正常工作。

  • 是的,如果我使用 `git clone --recurse-submodules` 可以工作,则会自动克隆 jbi2dec 和其他存储库。问题是当 Cargo 克隆存储库时,它似乎无法解决相对路径。 (3认同)