You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:15:40