【问题标题】:How to use libgit2sharp with ssh-transport-protocol?如何将 libgit2sharp 与 ssh-transport-protocol 一起使用?
【发布时间】:2014-08-06 00:01:43
【问题描述】:

当我在项目中使用 libgit2sharp 使用 ssh-transport 协议克隆存储库时,例如

git@github.com:libgit2/libgit2sharp.git 

它抛出一个异常,说“这个传输没有实现。对不起”

如何使用 libgit2sharp 克隆带有 ssh-transport-protocol 的存储库?

【问题讨论】:

    标签: git libgit2sharp


    【解决方案1】:

    很遗憾,尚不支持 SSH 协议。目前只有git://(只读)和http[s]://协议。

    但是,通过利用 libssh2 库,它最终会实现。

    订阅 issue #255 通知将使您随时了解有关此功能的进展情况。

    更新:

    libgit2 中正在进行一项工作(请参阅 PR #2428),这应该有助于我们使 LibGit2Sharp 能够尽快处理 ssh 协议。

    更新 2:

    PR #852 正在努力使 ssh 可用于 LibGit2Sharp

    【讨论】:

    • 感谢您的回答!所以现在没有办法在 C# 应用程序中使用 LibGit2Sharp 克隆/推送带有 ssh 密钥的 git 存储库?
    • 还没有。但 LibGit2Sharp 最终将允许此功能。
    • 看起来在这个github.com/libgit2/libgit2/pull/2600libgit2 上有一些进展
    • 如果/当它进入 LibGit2Sharp 时,它将不会自动包含在 Visual Studio 中。对不起。我们的政策是未经审查不得发布加密系统或实现它们的软件(如 libssh2)。
    • 我们可以获得更新 3 吗?尝试跟踪线索,但 10 分钟后仍未找到当前状态
    【解决方案2】:

    不幸的是,LibGit2Sharp 不包括开箱即用的必要加密库 (https://github.com/libgit2/libgit2sharp/issues/255#issuecomment-212580185)。

    使用LibGit2Sharp-SSH NuGet 包(fork)。

    private void Run()
    {
        var url = "ssh://username@gitblit.example.com/some/repository.git";
        var path = @"C:\Temp\some-repository";
    
        LibGit2Sharp.Repository.Clone(url, path, new LibGit2Sharp.CloneOptions { CredentialsProvider = MyCredentialsProvider });
    }
    
    private Credentials MyCredentialsProvider(string url, string usernameFromUrl, SupportedCredentialTypes types)
    {
        var sshDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".ssh");
    
        return new LibGit2Sharp.SshUserKeyCredentials()
        {
            Username = usernameFromUrl,
            Passphrase = string.Empty,
            PublicKey = Path.Combine(sshDir, "id_rsa.pub"),
            PrivateKey = Path.Combine(sshDir, "id_rsa"),
        };
    }
    

    【讨论】:

    • 从这个示例看来,您似乎无法使其 SSH 实现自动查找用户密钥,而必须猜测它们可能位于的任何路径——在您的代码中手动进行。这是不平凡的。从 %USERPROFILE%\.ssh 选择键的部分是否完全从 libssh2 中丢失?或者可以开启吗?
    • 我不了解 LibGit2Sharp 的内部结构,但您可以尝试手动解析 .ssh\config 文件。 cyberciti.biz/faq/create-ssh-config-file-on-linux-unix
    • 我的代码在到达凭据提供程序之前就引发了协议错误,因此这不是关键问题。显然,libssh2 有一个缺陷,现在这个库无法连接到任何修补过的服务器???
    • 顺便说一句,这是一个无效的代码示例,它使用了您的代码示例中未定义的变量。
    • 哪些变量没有定义?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2014-07-29
    • 1970-01-01
    • 2018-01-18
    相关资源
    最近更新 更多