2011-12-17 19 views
7

私はGitリポジトリをJGitで複製しようとしており、UnsupportedCredentialItemに問題があります。JGitクローンリポジトリ

マイコード:

FileRepositoryBuilder builder = new FileRepositoryBuilder(); 
Repository repository = builder.setGitDir(PATH).readEnvironment().findGitDir().build(); 

Git git = new Git(repository);    
CloneCommand clone = git.cloneRepository(); 
clone.setBare(false); 
clone.setCloneAllBranches(true); 
clone.setDirectory(PATH).setURI(url); 
UsernamePasswordCredentialsProvider user = new UsernamePasswordCredentialsProvider(login, password);     
clone.setCredentialsProvider(user); 
clone.call(); 

これは、例外が発生します:

org.eclipse.jgit.errors.UnsupportedCredentialItem: ssh://[email protected]:22: Passphrase for C:\Users\Marek\.ssh\id_rsa at 
org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider.get(UsernamePasswordCredentialsProvider.java:110).... 

をしかし、それは別の例外を発生します\私はの.sshにファイルknown_hostsファイルを削除した場合

org.eclipse.jgit.errors.UnsupportedCredentialItem: ssh://[email protected]:22: The authenticity of host 'github.com' can't be established. 
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. 
Are you sure you want to continue connecting? 
at org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider.get(UsernamePasswordCredentialsProvider.java:110).... 

がありますその質問に「はい」と答えるか、それともスキップするのか?

ありがとうございました!

答えて

4

あなたがユーザー名とパスワードでログインすると、httpsが必要だと思います。 sshの場合は、githubのレコードに一致する公開鍵が必要です。

2

私は同じ問題を抱えていました。理由は、rsa秘密鍵にパスフレーズが設定されているためです。この鍵のパスフレーズを削除すると、CredentialsProviderがなくても作業が開始されました。

UsernamePasswordCredentialsProviderはおそらくパスフレーズをサポートしていません。パスフレーズのセットを持っているしたい場合、あなたが定義することができます。たとえば、それをサポートしますするCredentialProviderを、所有する:

CloneCommand clone = Git.cloneRepository() 
    .setURI("...") 
    .setCredentialsProvider(new CredentialsProvider() { 

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

     @Override 
     public boolean isInteractive() { 
      return true; 
     } 

     @Override 
     public boolean get(URIish uri, CredentialItem... items) 
       throws UnsupportedCredentialItem { 

      for (CredentialItem item : items) { 
        if (item instanceof CredentialItem.StringType) { 
         ((CredentialItem.StringType) item). 
          setValue(new String("YOUR_PASSPHRASE")); 
         continue; 
        } 
       } 
       return true; 
      } 
     }); 

clone.call(); 

それは私の作品;)

3

これは@michalsのように(それを行います、ユーザ名/パスワードをsshで使用している場合はわずかです)

public void gitClone() throws GitAPIException { 
    final File localPath = new File("./TestRepo"); 
    Git.cloneRepository() 
     .setURI(REMOTE_URL) 
     .setDirectory(localPath) 
     .setCredentialsProvider(new UsernamePasswordCredentialsProvider("***", "***")) 
     .call(); 
} 
関連する問題