Rust Cargo配置Git子目录依赖方法及404报错解决方案
Cargo Git子目录依赖配置方案
Rust Cargo 完全支持引入Git仓库内的子文件夹作为依赖,你遇到的404报错属于配置格式错误,和Cargo本身的能力无关。
错误原因
你当前的配置把GitHub网页端的子目录浏览路径直接填到了git参数里:
rocket-okapi = { git = "https://github.com/GREsau/okapi/tree/master/rocket-okapi"}
https://github.com/GREsau/okapi/tree/master/rocket-okapi是GitHub网页UI的访问路由,不是有效的Git仓库clone地址,Cargo尝试拉取这个不存在的Git仓库时自然会返回404错误。
Cargo处理Git依赖的逻辑是:先完整拉取对应分支、标签或提交的整个Git仓库到本地缓存,再读取对应路径下的crate配置,Git本身不支持直接克隆仓库的单个子目录,因此git字段只能填写仓库根地址,子目录路径需要通过独立参数声明。
正确配置方法
Git仓库内的子目录路径需要通过directory字段单独指定,分支、标签、提交哈希也通过对应独立参数配置,不要拼接在Git URL中。
针对rocket-okapi的正确配置如下:
rocket-okapi = { git = "https://github.com/GREsau/okapi", branch = "master", directory = "rocket-okapi" }
配置参数说明:
git:填写Git仓库的根clone地址,不要附加任何子路径、网页路由后缀branch:指定要拉取的分支,若使用仓库设置的默认分支可省略该字段;如果需要固定版本,也可以替换为tag或rev字段指定标签或提交哈希directory:填写目标crate在仓库根目录下的相对路径,此处对应子文件夹rocket-okapi
网络异常适配
如果所处网络环境拉取GitHub仓库不稳定,可以开启Cargo调用本地Git客户端拉取的配置,在项目目录下新建或修改.cargo/config.toml文件,添加如下内容:
[net] git-fetch-with-cli = true
配置完成后重新执行cargo build即可正常拉取依赖完成构建。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

