I am using JGit and want to pull from the remote repository to my local repository.
The first approch was to clone the repository and that worked fine:
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());
}
But after the second call the repository does not need to be cloned again. Therefore I thought I need to pull
Git git = Git.open(new File("c:\\temp\\gittest"));
git.pull().call();
But I get the following error:
org.eclipse.jgit.api.errors.TransportException: http://172.20.1.2/team/myrepo.git: Authentication is required but no CredentialsProvider has been registered
I do not know where I can pass the pull command the credentials.
The git pull command is actually a combination of two other commands, git fetch followed by git merge . In the first stage of operation git pull will execute a git fetch scoped to the local branch that HEAD is pointed at. Once the content is downloaded, git pull will enter a merge workflow.
You can pass a CredentialsProvider
to the PushCommand
in the same way as with the CloneCommand
.
For example:
CredentialsProvider cp = new UsernamePasswordCredentialsProvider(username, password);
git.pull().setCredentialsProvider(cp).call();
All commands that connect to a remote repository, have a common base class: TransportCommand
. And this class provides the means to specify authentication providers.
To learn more about authentication with JGit you may also want to have a look at the JGit Authentication Explained article I wrote some time ago.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With