rust导入未发布的库

 

背景

cargo自带的依赖配置很方便,但默认是从发布到crates.io上的内容拉取的。
当我们需要拉取一些未发布的代码(例如github的main分支最新commit),或者拉取一些自建仓库上的私有代码(例如gitea、gitlab等),需要一些额外的配置。

前提条件

我们需要确保进行编译所在的环境,已配置对应仓库的ssh key。如果想采用http的方式,则需要进行全局配置账号密码的形式。

配置

首先对于依赖,需要改变成指定路径的方式:

# Cargo.toml
[dependencies]
# 原本的ssh地址为git@gitea.com:owner/mydep.git
# cargo要求必须为标准的url形式,因此前面需要添加ssh://的前缀,后面的冒号需要更改为斜杠
mydep = { git = "ssh://git@gitea.com/owner/mydep.git", branch = "test" }

# https或者http则正常引用原有的地址即可
httpdep = { git = "https://gitea.com/owner/httpdep", tag = "v1.0" }

另外需要在repo的根目录下创建cargo的配置文件(.cargo/config.toml):

.
├── .cargo
    ├── config.toml
├── Cargo.toml
├── src
    ├── main.rs

内容为配置使用git可执行文件来执行存储库认证,而不是默认使用libgit2。这个在使用ssh时是必要的。

# .cargo/config.toml
[net]
git-fetch-with-cli = true

参考