2016-11-20 57 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); 
}