背景
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
参考
PREVIOUSrust编译时注入编译信息
NEXTpostgresql数据脱敏