#java #git #github #jgit
#java #git #github #jgit
Вопрос:
Как я могу получить все ветви в репозитории с помощью JGit? Давайте возьмем пример репозитория. Как мы можем видеть, он имеет 5 ветвей.
Здесь я нашел этот пример:
int c = 0;
List<Ref> call = new Git(repository).branchList().call();
for (Ref ref : call) {
System.out.println("Branch: " ref " " ref.getName() " "
ref.getObjectId().getName());
c ;
}
System.out.println("Number of branches: " c);
Но все, что я получаю, это:
Branch: Ref[refs/heads/master=d766675da9e6bf72f09f320a92b48fa529ffefdc] refs/heads/master d766675da9e6bf72f09f320a92b48fa529ffefdc
Number of branches: 1
Branch: master
Ответ №1:
Если вам не хватает удаленных ветвей, вы должны установить ListMode
для ListBranchCommand
ALL
или REMOTE
. По умолчанию команда возвращает только локальные ветви.
new Git(repository).branchList().setListMode(ListMode.ALL).call();
Комментарии:
1. Я обновил пример в jgit-cookbook, чтобы показать это также.
Ответ №2:
Я использую приведенный ниже метод для ветвей git без клонирования репозитория с использованием Jgit
Это относится к pom.xml
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>4.0.1.201506240215-r</version>
</dependency>
Метод
public static List<String> fetchGitBranches(String gitUrl)
{
Collection<Ref> refs;
List<String> branches = new ArrayList<String>();
try {
refs = Git.lsRemoteRepository()
.setHeads(true)
.setRemote(gitUrl)
.call();
for (Ref ref : refs) {
branches.add(ref.getName().substring(ref.getName().lastIndexOf("/") 1, ref.getName().length()));
}
Collections.sort(branches);
} catch (InvalidRemoteException e) {
LOGGER.error(" InvalidRemoteException occured in fetchGitBranches",e);
e.printStackTrace();
} catch (TransportException e) {
LOGGER.error(" TransportException occurred in fetchGitBranches",e);
} catch (GitAPIException e) {
LOGGER.error(" GitAPIException occurred in fetchGitBranches",e);
}
return branches;
}