2016-11-20 58 views
2

我想用库“libgit2sharp”通过一个SSH密钥克隆一个仓库...我找不到任何东西......我可以通过“https “但我想要做的是使用SSH密钥。真的不清楚它是否得到支持。用SSH和libgit2sharp克隆一个git仓库

+0

的[如何使用ssh-传输协议使用libgit2sharp可能的复制? ](H T tp://stackoverflow.com/questions/24238999/how-to-use-libgit2sharp-with-ssh-transport-protocol) – SushiHangover

+0

嗯,我在发布之前看到这篇文章,但它不是很清楚。我从它检查了公关,事实上它看起来像他们一直在SSH支持,但我找不到它。我检查了其他公共关系,但它似乎与外部的馆藏有问题,以支持SSH,并没有说它究竟是否支持或不这样... – ssougnez

+0

你是建立自己的libgit2共享lbrary? – SushiHangover

回答

2

截至目前,有一个使用libssh2库的SSH实现。你可以在这里找到LibGit2Sharp - SSH

你应该为你添加libgit2sharp-ssh依赖项目才能使用它。它可以作为一个金块:https://www.nuget.org/packages/LibGit2Sharp-SSH

免责声明:我还没有找到正式的使用指南呢,我知道什么是从通过LibGit2论坛中与其他用户问题的点点滴滴放在一起。

从我的理解,你需要使用任何SshUserKeyCredentialsSshAgentCredentials使用SSH进行身份验证,以创建一个新的证书,并把它传递作为CloneOptions一部分。

在我使用示例代码“混帐”作为用户,仅仅是因为遥控器将会像[email protected]:项目/ reponame.git,在这种情况下,“混帐”是正确的用户,否则你会得到一个错误说

$exception {"username does not match previous request"}LibGit2Sharp.LibGit2SharpException 

代码克隆与SSH回购应该是类似的东西:

public CloneOptions cloningSSHAuthentication(string username, string path_to_public_key_file, string path_to_private_key_file) 
    { 
     CloneOptions options = new CloneOptions(); 
     SshUserKeyCredentials credentials = new SshUserKeyCredentials(); 
     credentials.Username = username; 
     credentials.PublicKey = path_to_public_key_file; 
     credentials.PrivateKey = path_to_private_key_file; 
     credentials.Passphrase = "ssh_key_password"; 
     options.CredentialsProvider = new LibGit2Sharp.Handlers.CredentialsHandler((url, usernameFromUrl, types) => credentials) ; 
     return options; 
    } 

public CloneOptions cloneSSHAgent(string username){ 
     CloneOptions options = new CloneOptions(); 
     SshAgentCredentials credentials = new SshAgentCredentials(); 
     credentials.Username = username; 
     var handler = new LibGit2Sharp.Handlers.CredentialsHandler((url, usernameFromUrl, types) => credentials); 
     options.CredentialsProvider = handler; 
     return options; 

} 

public void CloneRepo(string remotePath, string localPath){ 
    CloneOptions options = cloningSSHAuthentication("git", "C:\\folder\\id_rsa.pub", "C:\\folder\\id_rsa"); 
    Repository.Clone(remotePath, localPath, options); 
}