如何使用LibGit2Sharp从SSH Git仓库拉取代码?
问题原因与解决方法
你代码里的核心问题是调用Fetch时传错了参数:repo.Network.Fetch的第一个参数需要的是远程仓库的名称(比如"origin"),但你传了远程仓库的SSH URL(git@myserver/myrepo.git),LibGit2Sharp把这个URL当成远程名称解析,自然会报错说它不是合法的远程名。
修正后的代码
using LibGit2Sharp; // LibGit2Sharp Version 0.26.2 with LibGit2Sharp.NativeBinaries Version 2.0.306 public static void Fetch(string repoFolder, string remoteName, string branchName = null) { using (var repo = new Repository(repoFolder)) { // 直接根据名称获取远程仓库对象,无需提取URL var remote = repo.Network.Remotes.Single(r => r.Name == remoteName); // 确定要拉取的分支规范,默认拉取master分支 var targetBranch = branchName ?? "master"; var fetchRefSpec = $"+refs/heads/{targetBranch}:refs/remotes/{remoteName}/{targetBranch}"; // 调用Fetch时传入远程对象或远程名称即可 repo.Network.Fetch(remote, new[] { fetchRefSpec }); } }
关键调整说明
- 移除了获取远程URL的逻辑,直接用找到的
Remote对象(或remoteName字符串)作为Fetch的第一个参数 - 手动构造拉取的RefSpec,比先查找分支再拉取更稳妥,还能兼容首次拉取、分支本地未同步的场景
- SSH协议层面无需额外代码配置:LibGit2Sharp会自动读取系统SSH配置(比如
~/.ssh/id_rsa私钥),只要本地能通过SSH正常访问该GitHub Enterprise仓库,代码就能正常工作
内容的提问来源于stack exchange,提问作者C Robinson
相关产品推荐
相关产品推荐

