9

次のコードでjgitのAPIを使用してgit pull/pushを実行しようとしています

org.eclipse.jgit.api.Git.open(theRepoFile).pull().call()

しかし、私は例外を受けています

JSchException Auth fail
com.jcraft.jsch.Session.connect (Session.java:461)
org.eclipse.jgit.transport.JschConfigSessionFactory.getSession (JschConfigSessionFactory.java:116)
org.eclipse.jgit.transport.SshTransport.getSession (SshTransport.java:121)
org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection.<init> (TransportGitSsh.java:306)
org.eclipse.jgit.transport.TransportGitSsh.openPush (TransportGitSsh.java:152)
org.eclipse.jgit.transport.PushProcess.execute (PushProcess.java:130)
org.eclipse.jgit.transport.Transport.push (Transport.java:1127)
org.eclipse.jgit.api.PushCommand.call (PushCommand.java:153)

cgit pull と push を使用しても機能します。

サンプルコードのSOをチェックしてみました

jgitを使用したJava gitクライアント

しかし、上記の質問は、通常は ssh キーを介して認証されるリモート リポジトリで git pull を実行するために必要なものの完全なコード例を提供していません。~/.ssh/または同等の Windowsから資格情報を取得する方法が必要です。

4

3 に答える 3

12

JschはSSHキーを自動的に検出しますが、パスワードで保護されている場合は失敗します。次のように、CredentialsProviderを介してパスフレーズを指定する必要があります。

JschConfigSessionFactory sessionFactory = new JschConfigSessionFactory() {
@Override
protected void configure(OpenSshConfig.Host hc, Session session) {
    CredentialsProvider provider = new CredentialsProvider() {
        @Override
        public boolean isInteractive() {
            return false;
        }

        @Override
        public boolean supports(CredentialItem... items) {
            return true;
        }

        @Override
        public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem {
            for (CredentialItem item : items) {
                ((CredentialItem.StringType) item).setValue("yourpassphrase");
            }
            return true;
        }
    };
    UserInfo userInfo = new CredentialsProviderUserInfo(session, provider);
    session.setUserInfo(userInfo);
}
};
SshSessionFactory.setInstance(sessionFactory);
于 2013-03-08T09:39:19.523 に答える
3

問題は、Jsch が標準で s をサポートしていないことssh-agentです。機能させるには、 https://github.com/ymnk/jsch-agent-proxyを構成する必要があります。

別の方法としては、独自の値を作成して を正しい値にorg.eclipse.jgit.transport.CredentialsProvider設定するorg.eclipse.jgit.transport.CredentialItemこともできます (ユーザーに要求するか、ファイルを検索します)。でデフォルトCredentialsProviderを変更できますorg.eclipse.jgit.transport.CredentialsProvider/setDefault

詳細については、私の clojure ライブラリ dj を参照してください: https://github.com/bmillare/dj/blob/library/src/dj/git.clj

于 2012-09-21T19:59:56.297 に答える
-1

ログがあまり明確ではなかったため、JSch でエラーが発生してしばらくブロックされたことを漠然と覚えています。同じ問題かどうかはわかりませんが、このページに従って問題を解決しました。

https://help.github.com/articles/generating-ssh-keys

(ネットワーク構成が間違っていたことが原因でした)

于 2012-09-19T21:19:49.920 に答える