使用Git.cloneRepository

时间:2019-12-15 14:14:26

标签: java eclipse jgit

当我使用Eclipse jgit api Git.cloneRepository()克隆一个大仓库时,它发生java.io.EOFException:Packfile被截断。 在org.eclipse.jgit.transport.PackParser.fill(PackParser.java:1241)上。

我的代码:

CloneCommand cmd = Git.cloneRepository();
cmd.setDirectory(repo)
cmd.setGitDir()
cmd.setURI()
cmd.setCredentialsProvider()
cmd.setProgressMonitor()
cmd.setTimeout(600000)
git = cmd.call()

它在下面发生trunck错误:  接收物体:94%(143964/152511)

谢谢。

1 个答案:

答案 0 :(得分:0)

最后,我使用ssh解决了这个问题。请注意,此仓库超出了4.5G! 如果您的仓库足够大(例如,大于4G),请勿使用HTTP格式URI与jgit进行克隆,则应使用SSH URI与jgit api进行克隆,否则您将得到packfile被截断的错误。即使您使用最新的jgit版本

CloneCommand cmd = Git.cloneRepository()
cmd.setDirecotry()
cmd.setGitDir()
cmd.setURI()
cmd.setCredentialsProvider(new CredentialsProvider(){

})
cmd.setProgressMonitor(new TextProgressMonitor())
cmd.setTimeout(600000)
cmd.setTransportConfigCallback(new TransportConfigCallback(){
    @Override
    public void configure(Transport transport){
         SshTransport ssh = (SshTransport)transport
         ssh.setSshSessionFactory(new JshConfigSessionFactory(){
              @Override
              protected void configure(OpenSshConfig.Host host,Session 
              session){
                  session.setConfig("StrictHostKeyChecking","no"); 
              }
              @Override
              protected JSch getJSch(Final OpenSshConfig.Host hc,FS fs) 
              throws JSchException {
                  JSch jsch = super.getJSch(hc,fs);
                  jsch.removeAllIdentity();
                  jsch.addIdentity("/path/to/your/private key")//note must be 
//a rsa private key format,otherwise you will get the bad private key error 
                  return jsch;

              } 

         })
    } 
})
git = cmd.call();