Получение всех ветвей с помощью JGit

#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;
            }