我遇到了JGit 3.0.0.201306101825-r的问题。这是我的克隆功能:
public static void cloneRepository(String localRepositoryPath, String remoteRepositoryURI, String branch, String username, String password) throws IOException, InvalidRemoteException, GitAPIException {
File workDir = createFolder(localRepositoryPath);
CloneCommand clone = Git.cloneRepository();
clone.setBare(false);
clone.setCloneAllBranches(false);
clone.setBranch(branch);
clone.setDirectory(workDir).setURI(remoteRepositoryURI);
if (StringUtils.isNotEmpty(username)) {
UsernamePasswordCredentialsProvider credentials = new UsernamePasswordCredentialsProvider(username, password);
clone.setCredentialsProvider(credentials);
}
Git git = clone.call();
}
我正在尝试从gerrit克隆存储库,每个人都有权阅读它。 ' git clone ssh://gerrit.xx.com:29418 / project / test'从终端正常工作,但与Jgit我无法克隆存储库。这就是我得到的错误:
[INFO] [talledLocalContainer] Caused by: org.eclipse.jgit.errors.TransportException: ssh://gerrit.xx.com:29418/project/test: Auth fail
[INFO] [talledLocalContainer] at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:142) [org.eclipse.jgit-3.0.0.201306101825-r.jar:3.0.0.201306101825-r]
[INFO] [talledLocalContainer] at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:121) [org.eclipse.jgit-3.0.0.201306101825-r.jar:3.0.0.201306101825-r]
[INFO] [talledLocalContainer] at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:248) [org.eclipse.jgit-3.0.0.201306101825-r.jar:3.0.0.201306101825-r]
[INFO] [talledLocalContainer] at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:147) [org.eclipse.jgit-3.0.0.201306101825-r.jar:3.0.0.201306101825-r]
[INFO] [talledLocalContainer] at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:136) [org.eclipse.jgit-3.0.0.201306101825-r.jar:3.0.0.201306101825-r]
[INFO] [talledLocalContainer] at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:122) [org.eclipse.jgit-3.0.0.201306101825-r.jar:3.0.0.201306101825-r]
[INFO] [talledLocalContainer] at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1105) [org.eclipse.jgit-3.0.0.201306101825-r.jar:3.0.0.201306101825-r]
[INFO] [talledLocalContainer] at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:128) [org.eclipse.jgit-3.0.0.201306101825-r.jar:3.0.0.201306101825-r]
[INFO] [talledLocalContainer] ... 55 more
[INFO] [talledLocalContainer] Caused by: com.jcraft.jsch.JSchException: Auth fail
[INFO] [talledLocalContainer] at com.jcraft.jsch.Session.connect(Session.java:491) [jsch-0.1.49.jar:]
[INFO] [talledLocalContainer] at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:116) [org.eclipse.jgit-3.0.0.201306101825-r.jar:3.0.0.201306101825-r]
[INFO] [talledLocalContainer] ... 62 more
[INFO] [talledLocalContainer]
如何解决这个问题的想法非常受欢迎!
答案 0 :(得分:2)
我认为 git clone ssh://gerrit.xx.com:29418 / project / test 有效,因为它使用客户端机器上的登录用户名并对gerrit执行基于密钥的身份验证。
通常,您无法使用ssh执行任何匿名通信。 JGit可能不了解其环境,您必须明确提供用户名以及适当的ssh密钥,尤其是在启用ssh的用户上下文之外运行Java代码时。使用UsernamePasswordCredentialsProvider完全无法使用ssh访问gerrit。
我建议您使用HTTP对gerrit进行匿名读取访问。 git clone http://gerrit.xx.com: [port] / test 应该完成这项工作。 [port] 是gerrit安装侦听HTTP请求的端口。我认为默认值是8080。
答案 1 :(得分:1)
如果你没有使用像Eclipse那样有支持的程序,你可以尝试运行你的进程,将GIT_SSH设置为外部可执行文件,这可以代表你进行身份验证。