Аутентификация с помощью PullCommand 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:\\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: Authentication is required but no CredentialsProvider has been registered

Я не знаю, где я могу передать учетные данные команде pull.


person Hauke    schedule 13.03.2016    source источник


Ответы (1)


Вы можете передать CredentialsProvider PushCommand так же, как и CloneCommand.

Например:

CredentialsProvider cp = new UsernamePasswordCredentialsProvider(username, password);
git.pull().setCredentialsProvider(cp).call();

Все команды, которые подключаются к удаленному репозиторию, имеют общий базовый класс: TransportCommand. И этот класс предоставляет средства для указания провайдеров аутентификации.

Чтобы узнать больше об аутентификации с помощью JGit, вы также можете взглянуть на JGit Authentication Explained, которую я написал некоторое время назад.

person Rüdiger Herrmann    schedule 13.03.2016