Java 使用JGit和x27进行身份验证;s PullCommand

Java 使用JGit和x27进行身份验证;s PullCommand,java,git,jgit,Java,Git,Jgit,我正在使用JGit,希望从远程存储库拉到本地存储库 第一种方法是克隆存储库,效果很好: CredentialsProvider cp = new UsernamePasswordCredentialsProvider(username, password); try (Git result = Git.cloneRepository() .setURI("http://172.20.1.2/team/myrepo.git") .setDirectory(new File("c:\

我正在使用JGit,希望从远程存储库拉到本地存储库

第一种方法是克隆存储库,效果很好:

CredentialsProvider cp = new UsernamePasswordCredentialsProvider(username, password);
try (Git result = Git.cloneRepository()
    .setURI("http://172.20.1.2/team/myrepo.git")
    .setDirectory(new File("c:\\temp\\gittest"))
    .setCredentialsProvider(cp)
    .call()) {
        System.out.println("Having repository: " + result.getRepository().getDirectory());
    }
但是在第二次调用之后,不需要再次克隆存储库。所以我想我需要拉

Git git = Git.open(new File("c:\\temp\\gittest"));
git.pull().call();
但我得到了以下错误:

org.eclipse.jgit.api.errors.TransportException:http://172.20.1.2/team/myrepo.git: 需要身份验证,但尚未注册CredentialsProvider

我不知道在哪里可以传递pull命令和凭据

您可以使用与
CloneCommand
相同的方式将
CredentialsProvider
传递给
PushCommand

例如:

CredentialsProvider cp=新用户名PasswordCredentialsProvider(用户名、密码);
git.pull().setCredentialsProvider(cp.call();
所有连接到远程存储库的命令都有一个公共基类:
TransportCommand
。此类提供了指定身份验证提供程序的方法

要了解更多关于JGit身份验证的信息,您可能还想看看我不久前写的文章