【问题标题】:JGit clone fails from gerrit without username or passwordJGit 克隆在没有用户名或密码的情况下从 gerrit 失败
【发布时间】:2013-10-03 16:54:15
【问题描述】:

我在使用 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] 

非常欢迎提出解决此问题的想法!

【问题讨论】:

    标签: java git jgit


    【解决方案1】:

    我认为 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。

    【讨论】:

      【解决方案2】:

      如果您没有使用像 Eclipse 这样具有支持的程序,您可以尝试运行您的进程并将 GIT_SSH 设置为外部可执行文件,该可执行文件可能会代表您进行身份验证。

      【讨论】:

        猜你喜欢
        • 2013-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        • 2016-12-12
        • 2018-05-04
        • 2013-03-29
        相关资源
        最近更新 更多