【发布时间】:2014-08-06 00:01:43
【问题描述】:
当我在项目中使用 libgit2sharp 使用 ssh-transport 协议克隆存储库时,例如
git@github.com:libgit2/libgit2sharp.git
它抛出一个异常,说“这个传输没有实现。对不起”
如何使用 libgit2sharp 克隆带有 ssh-transport-protocol 的存储库?
【问题讨论】:
标签: git libgit2sharp
当我在项目中使用 libgit2sharp 使用 ssh-transport 协议克隆存储库时,例如
git@github.com:libgit2/libgit2sharp.git
它抛出一个异常,说“这个传输没有实现。对不起”
如何使用 libgit2sharp 克隆带有 ssh-transport-protocol 的存储库?
【问题讨论】:
标签: git libgit2sharp
很遗憾,尚不支持 SSH 协议。目前只有git://(只读)和http[s]://协议。
但是,通过利用 libssh2 库,它最终会实现。
订阅 issue #255 通知将使您随时了解有关此功能的进展情况。
libgit2 中正在进行一项工作(请参阅 PR #2428),这应该有助于我们使 LibGit2Sharp 能够尽快处理 ssh 协议。
PR #852 正在努力使 ssh 可用于 LibGit2Sharp
【讨论】:
不幸的是,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"),
};
}
【讨论】:
%USERPROFILE%\.ssh 选择键的部分是否完全从 libssh2 中丢失?或者可以开启吗?