2011-12-17 27 views
7

Estoy intentando clonar el repositorio de Git con JGit y tengo un problema con UnsupportedCredentialItem.Repositorio de clones de JGit

Mi código:

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(); 

Ocurrirá Excepción:

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).... 

Pero si elimino known_hosts archivo en .ssh \ Ocurrirá diferente Excepción

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).... 

¿Hay ¿Hay alguna posibilidad de escribir "sí" a esa pregunta o simplemente omitirla?

¡Gracias!

Respuesta

4

Creo que si inicia sesión con nombre de usuario y contraseña, necesita https. Para ssh necesitarás una clave pública que coincida con la que está en el registro con github.

2

Tuve el mismo problema. El motivo fue la frase de contraseña establecida para la clave privada de rsa. Cuando elimino la frase de contraseña para esta clave, comenzó a funcionar sin ningún CredentialsProvider.

UsernamePasswordCredentialsProvider probablemente no sean compatibles con la frase de contraseña. Si le gustaría tener conjunto frase de contraseña, se podría definir es el propietario CredentialProvider, que va a apoyar, por ejemplo:

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(); 

Funciona para mí;)

3

Esto lo hará (como @michals, solo menos código) si se usa nombre de usuario/contraseña con ssh

public void gitClone() throws GitAPIException { 
    final File localPath = new File("./TestRepo"); 
    Git.cloneRepository() 
     .setURI(REMOTE_URL) 
     .setDirectory(localPath) 
     .setCredentialsProvider(new UsernamePasswordCredentialsProvider("***", "***")) 
     .call(); 
} 
Cuestiones relacionadas