JGit: состояние удаленного хранилища

1

Я пытаюсь получить статус репозитория Git с помощью JGit в Eclipse.
Я нашел несколько примеров здесь: 1, 2 и объединил их:

import java.io.File;
import java.io.IOException;

import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.InvalidRemoteException;
import org.eclipse.jgit.api.errors.TransportException;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
import org.eclipse.jgit.api.Status;

public class Main {

     private static final String REMOTE_URL = "https://github.com/github/testrepo.git";

        public static void main(String[] args) throws IOException, InvalidRemoteException, TransportException, GitAPIException {
            // prepare a new folder for the cloned repository
            File localPath = File.createTempFile("TestGitRepository", "");
            localPath.delete();

            // then clone
            System.out.println("Cloning from " + REMOTE_URL + " to " + localPath);
            Git.cloneRepository()
                    .setURI(REMOTE_URL)
                    .setDirectory(localPath)
                    .call();

            // now open the created repository
            FileRepositoryBuilder builder = new FileRepositoryBuilder();
            Repository repository = builder.setGitDir(localPath)
                    .readEnvironment() // scan environment GIT_* variables
                    .findGitDir() // scan up the file system tree
                    .build();

            System.out.println("Having repository: " + repository.getDirectory());

            Status status = new Git(repository).status().call();
            System.out.println("Added: " + status.getAdded());
            System.out.println("Changed: " + status.getChanged());
            System.out.println("Conflicting: " + status.getConflicting());
            System.out.println("ConflictingStageState: " + status.getConflictingStageState());
            System.out.println("IgnoredNotInIndex: " + status.getIgnoredNotInIndex());
            System.out.println("Missing: " + status.getMissing());
            System.out.println("Modified: " + status.getModified());
            System.out.println("Removed: " + status.getRemoved());
            System.out.println("Untracked: " + status.getUntracked());
            System.out.println("UntrackedFolders: " + status.getUntrackedFolders());

            repository.close();
        }
}

Но я получаю следующую ошибку:

Exception in thread "main" org.eclipse.jgit.errors.NoWorkTreeException: Bare Repository has neither a working tree, nor an index
    at org.eclipse.jgit.lib.Repository.getWorkTree(Repository.java:1245)
    at org.eclipse.jgit.treewalk.FileTreeIterator.<init>(FileTreeIterator.java:88)
    at org.eclipse.jgit.api.StatusCommand.call(StatusCommand.java:126)
    at Main.main(Main.java:38)
Теги:
github
jgit

1 ответ

3
Лучший ответ

Если вы замените часть фрагмента FileRepositoryBuilder на приведенные ниже строки, фрагмент будет работать.

Git git = Git.open( localPath );
Repository repository = git.getRepository();

Обратите внимание, что ваш фрагмент устанавливает GitDir конструктора в localPath, но локальный путь обозначает рабочий каталог только что клонированного репозитория.

  • 0
    Спасибо, я больше не получаю ошибку! Вы также знаете, почему я получаю только пустые результаты, например: Added: [] Changed: [] Conflicting: []...
  • 0
    Чего бы вы ожидали? Результаты пусты, потому что в только что клонированном репозитории нет разницы между рабочим каталогом, индексом и коммитом HEAD. Пожалуйста, убедитесь, что вы понимаете статус GIT .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню