Получить ветку по умолчанию для удаленного репозитория с помощью JGit - PullRequest
0 голосов
/ 23 мая 2018

Я работаю над Git-клиентом и сейчас пытаюсь реализовать извлечение из определенной ветки.У меня есть поле со списком, которое я заполняю именами веток, и я хотел бы выяснить, какая ветвь является значением по умолчанию, чтобы я мог установить его в качестве предварительно выбранного элемента в поле со списком при подключении к действительному репозиторию Git.

Я перечисляю все удаленные ветви, как вы можете видеть ниже, но я не могу понять, какая из них используется по умолчанию.

Map<String, Ref> callAsMap = Git.lsRemoteRepository()
    .setRemote("https://github.com/example")
    .setCredentialsProvider(credentialsProvider)
    .callAsMap();

Итак, есть ли способ (стандартный или "хакерский") дляопределить, какой Ref объект представляет ветку по умолчанию?И как я могу получить его имя?

1 Ответ

0 голосов
/ 23 мая 2018

Repository::getFullBranch возвращает текущую ветвь локального репозитория.

Чтобы получить ветку по умолчанию для удаленного репозитория, вам нужно запросить его HEAD ref.Карта, возвращаемая размещенным вами фрагментом, должна содержать запись с ключом HEAD и (если я не ошибаюсь) значением, обозначающим имя ветви по умолчанию.

Если HEADссылается на идентификатор объекта, вы можете получить список всех удаленных ссылок с repository.getRefDatabase().getRefs(Constants.R_REMOTES), чтобы найти идентификатор HEAD.Этот подход может быть неточным, так как несколько ссылок могут указывать на один и тот же идентификатор объекта.

Обратите внимание, что для удаленного хранилища не требуется объявлять ветку по умолчанию.

См. Также эти сообщения о том, как C-Git находит ветку по умолчанию: git - как получить ветку по умолчанию? и Что определяет ветку по умолчанию после "git clone"? )

...