如何将libgit2sharp与ssh-transport-protocol一起使用?

时间:2014-06-16 07:59:18

标签: git libgit2sharp

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

git@github.com:libgit2/libgit2sharp.git 

它抛出一个例外,说"这种运输没有实施。遗憾"

如何使用libgit2sharp?

使用ssh-transport-protocol克隆存储库

2 个答案:

答案 0 :(得分:7)

不幸的是,还不支持Ssh协议。目前只有git://(只读)和http[s]://协议。

然而,最终将通过利用libssh2库来实现。

订阅 issue #255 通知会让您了解有关此功能的进展情况。

更新

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

更新2:

PR #852 正致力于为libGit2Sharp提供ssh

答案 1 :(得分: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"),
    };
}