Получить объект репозитория для удаленного адреса - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь получить объект Repository по URL-адресу, а JGit использует такой код:

Repository repository = Git.lsRemoteRepository()
    .setHeads(true)
    .setTags(true)
    .setRemote(url)
    .setCredentialsProvider(credentials)
    .getRepository();

Однако с этим кодом repository равно null. С другой стороны, используя этот код

Collection<Ref> refs = Git.lsRemoteRepository()
    .setHeads(true)
    .setTags(true)
    .setRemote(urlString)
    .setCredentialsProvider(credentials)
    .call();

можно получить коллекцию объектов Ref, и этот метод работает для удаленного URL.

Можно ли получить объект Repository из объекта Ref? Как я могу найти файл, начиная с объекта Ref?

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Класс Repository JGit представляет локальный репозиторий, довольно часто клон удаленного репозитория.

LsRemoteCommand, возвращаемое Git::lsRemoteRepository, работает вне контекста локального хранилища и, следовательно, возвращает null для getRepository.

A Ref в JGit также не имеет ссылки на репозиторий, так как они могут происходить из репозитория без локального представления. Помните, например, что нет локального репозитория для ссылок, возвращаемых LsRemoteCommand.

Чтобы сделать что-нибудь полезное с хранилищем, его нужно сначала клонировать. Например, с помощью:

Git git = Git.cloneRepository().setURI(url).call();
// do something with repository, access to repository through git.getRepostory()
git.close();

Код эквивалентен git clone <url>. Если URL-адрес https://host.org/repo.git, команда создаст клон в подкаталоге repo текущего рабочего каталога.

Подробнее о клонировании репозиториев с помощью JGit можно узнать здесь: https://www.codeaffine.com/2015/11/30/jgit-clone-repository/

0 голосов
/ 05 января 2019

Попробуйте это:

String repoUrl = "https://github.com/GovindParashar136/SpringBootWithRestOpenIdClientAuthentication.git";
String cloneDirectoryPath = "/path/to/directory/"; // Ex.in windows c:\\gitProjects\SpringBootWithRestOpenIdClientAuthentication\
try {
    System.out.println("Cloning "+repoUrl+" into "+repoUrl);
    Git.cloneRepository()
        .setURI(repoUrl)
        .setDirectory(Paths.get(cloneDirectoryPath).toFile())
        .setCredentialsProvider(new UsernamePasswordCredentialsProvider("username", "password"))
        .call();
    System.out.println("Completed Cloning");
} catch (GitAPIException e) {
    System.out.println("Exception occurred while cloning repo");
    e.printStackTrace();
}
...