Rust : 无法通过 Cargo 拉取私有代码仓库解决方式 failed to load source for dependency

问题描述

在使用rust 的过程中,有时候会依赖一些公司内部,或者私有的代码仓库,这时候,通常需要使用ssh认证,才能正常拉取仓库代码,但是有时候会遇到 Cargo 无法拉取代码的情况,看起来像是 ssh 认证失败导致的无法拉取代码,报错如下:

rust 复制代码
Updating git repository `ssh://git@git.yourcompany.com/your-team/your-repo`
error: failed to get `private-crate` as a dependency of package `your-project v0.1.0 (/path/to/your-project)`

Caused by:
  failed to load source for dependency `private-crate`

Caused by:
  Unable to update ssh://git@git.yourcompany.com/your-team/your-repo

Caused by:
  failed to fetch into: /Users/yourusername/.cargo/git/db/your-repo-xxxxxx

Caused by:
  failed to authenticate when downloading repository

  * attempted ssh-agent authentication, but no usernames succeeded: `git`

  if the git CLI succeeds then `net.git-fetch-with-cli` may help here
  https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli

Caused by:
  no authentication methods succeeded

问题原因

默认新情况下,cargo使用内置的 libgit2 来拉取 git 依赖,而非系统自带的 git 命令行工具进行依赖拉取,libgit2 对 SSH 认证幼体套独立的实现,所以可能无法直接复用本地对ssh的配置,ssh-agent 环境变量 以及 SSH 密钥设置。

这就可能导致一个现象:正常使用 git clone 可以拉取到项目代码,但是 rust-analyzer 却总是报错无法拉取依赖,ssh 认证失败等问题。

解决方案

在你的项目中,添加 .cargo 文件夹,并在文件夹中创建 config.toml 文件,

bash 复制代码
your-project/
├─ .cargo/
│  └─ config.toml
└─ Cargo.toml

在config.toml 文件中添加以下配置

toml 复制代码
[net]
git-fetch-with-cli = true

就可以让 cargo 使用本机已安装的 git 命令行工具拉取配置,从而与手动拉取配置一样,正常获取到依赖。

验证

最后重启代码编辑器vscode,或者运行cargo b 进行验证,会发现问题已解决。Pomelo_刘金,转载请注明链接,感谢!

相关推荐
低调滴开发9 小时前
3 行代码写崩一个函数?切片才是 Rust 字符串处理的正确姿势
开发语言·后端·rust
小灰灰搞电子12 小时前
Rust+Slint 实现高级动态消息提示框源码分享
开发语言·rust
qq_4069810313 小时前
大白话rust系列08 当变量遮蔽遇上引用,探究变量遮蔽的本质
开发语言·后端·rust
轻舟技术A14 小时前
Pi、rpi、Pi-Bolt 重测:rpi 在启动、内存与读取上全面领先
人工智能·rust
用户144984334647515 小时前
我为什么做一个开源的 Mac 清理工具
rust
古城小栈17 小时前
Rust 学习路线,供初学者参考
开发语言·rust
小熊吃保安2 天前
Windows也能用 Apple Watch 解锁
windows·rust·开源
离歌漠2 天前
《我用 Tauri 做了一个本地开发工具箱》
rust·typescript·vue
小小龙学IT3 天前
Python Polars 高性能数据处理引擎深度解析
开发语言·python·rust·1024程序员节