2011-12-17 32 views
7

Tôi đang cố gắng sao chép kho lưu trữ Git với JGit và tôi gặp sự cố với UnsupportedCredentialItem.Kho lưu trữ bản sao JGit

Mã của tôi:

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

Nó sẽ xảy ra ngoại lệ:

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

Nhưng nếu tôi xóa known_hosts tập tin trong .ssh \ Nó sẽ xảy ra ngoại lệ khác nhau

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

Có bất kỳ khả năng nào để gõ "có" cho câu hỏi đó hay chỉ bỏ qua nó?

Cảm ơn bạn!

Trả lời

3

Tôi cho rằng bạn sẽ muốn kiểm tra sự giúp đỡ github:

http://help.github.com/win-set-up-git/

Đặc biệt là phần về tạo phím ssh (ssh-keygen -t rsa -C "[email protected]"). Đọc bài viết cho môi trường của bạn và bạn sẽ hiểu cách có cấu hình tốt hơn.

4

Tôi nghĩ nếu bạn đăng nhập bằng tên người dùng và mật khẩu, bạn cần https. Đối với ssh, bạn sẽ cần một khóa công khai khớp với khóa công khai với github.

2

Tôi đã gặp vấn đề tương tự. Lý do là cụm mật khẩu được đặt cho khóa cá nhân rsa. Khi tôi xóa cụm mật khẩu cho khóa này, nó bắt đầu hoạt động mà không cần bất kỳ CredentialsProvider.

UsernamePasswordCredentialsProvider có thể không hỗ trợ cụm mật khẩu. Nếu bạn muốn có bộ cụm mật khẩu, bạn có thể xác định bạn sở hữu CredentialProvider, mà sẽ hỗ trợ nó, ví dụ:

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

Nó làm việc cho tôi;)

3

này sẽ làm điều đó (như @michals, chỉ ít mã hơn) nếu sử dụng tên người dùng/mật khẩu với ssh

public void gitClone() throws GitAPIException { 
    final File localPath = new File("./TestRepo"); 
    Git.cloneRepository() 
     .setURI(REMOTE_URL) 
     .setDirectory(localPath) 
     .setCredentialsProvider(new UsernamePasswordCredentialsProvider("***", "***")) 
     .call(); 
} 
Các vấn đề liên quan