5

NGit を使用して Github に接続しようとしています (つまり、秘密鍵とパスワードを使用します)。

誰かが私を案内してくれますか?

私の通常のフェッチは次のようになります。

            var git = Git.CloneRepository()
            .SetDirectory(_properties.OutputPath)
            .SetURI(_properties.SourceUrlPath)
            .SetBranchesToClone(new Collection<string>() { "master" })
            .SetCredentialsProvider(new UsernamePasswordCredentialsProvider("username","password"))
            .SetTimeout(3600)
            .Call();

秘密鍵でこれを行うにはどうすればよいですか?

4

1 に答える 1

4

長い戦いの後、Jgit の例を Google で検索し、さらに多くの苦労を経て、解決策を見つけました!

基本的に、SessionFactory を独自のものでオーバーライドし、接続時に証明書を挿入します。

public class CustomConfigSessionFactory : JschConfigSessionFactory
{
    public string PrivateKey { get; set; }
    public string PublicKey { get; set; }

    protected override void Configure(OpenSshConfig.Host hc, Session session)
    {
        var config = new Properties();
        config["StrictHostKeyChecking"] = "no";
        config["PreferredAuthentications"] = "publickey";
        session.SetConfig(config);

        var jsch = this.GetJSch(hc, FS.DETECTED);
        jsch.AddIdentity("KeyPair", Encoding.UTF8.GetBytes(PrivateKey), Encoding.UTF8.GetBytes(PublicKey), null);
    }
}

そして、次のように注入します。

var customConfigSessionFactory = new CustomConfigSessionFactory();
customConfigSessionFactory.PrivateKey = properties.PrivateKey;
customConfigSessionFactory.PublicKey = properties.PublicKey;

NGit.Transport.JschConfigSessionFactory.SetInstance(customConfigSessionFactory);

var git = Git.CloneRepository()
          .SetDirectory(properties.OutputPath)
          .SetURI(properties.SourceUrlPath)
          .SetBranchesToClone(new Collection<string>() { "master" })
          .Call();
于 2013-03-17T07:11:19.813 に答える