Подтвердить что ты не робот

Используйте JGit TreeWalk для отображения файлов и папок

Я хотел бы использовать JGit для отображения списка всех файлов и папок для пересмотра главы. Я могу перечислить все файлы с помощью TreeWalk, но это не список папок.

Вот что я до сих пор:

public class MainClass {

    public static void main(String[] args) throws IOException {
        FileRepositoryBuilder builder = new FileRepositoryBuilder();
        Repository repository = builder
                .setGitDir(new File("C:\\temp\\git\\.git")).readEnvironment()
                .findGitDir().build();

        listRepositoryContents(repository);

        repository.close();
    }

    private static void listRepositoryContents(Repository repository) throws IOException {
        Ref head = repository.getRef("HEAD");

        // a RevWalk allows to walk over commits based on some filtering that is defined
        RevWalk walk = new RevWalk(repository);

        RevCommit commit = walk.parseCommit(head.getObjectId());
        RevTree tree = commit.getTree();
        System.out.println("Having tree: " + tree);

        // now use a TreeWalk to iterate over all files in the Tree recursively
        // you can set Filters to narrow down the results if needed
        TreeWalk treeWalk = new TreeWalk(repository);
        treeWalk.addTree(tree);
        treeWalk.setRecursive(true);
        while (treeWalk.next()) {
            System.out.println("found: " + treeWalk.getPathString());
        }
    }
}
4b9b3361

Ответ 1

Git не отслеживает собственные каталоги. Вы можете выводить непустые имена каталогов из строки пути, которую вы получаете из TreeWalk.

См. Git FAQ (найдите "пустую папку" ) для подробного объяснения и возможных обходных путей.

Ответ 2

Вам нужно установить рекурсивное значение в false (см. документация), а затем выполните следующие действия:

TreeWalk treeWalk = new TreeWalk(repository);
treeWalk.addTree(tree);
treeWalk.setRecursive(false);
while (treeWalk.next()) {
    if (treeWalk.isSubtree()) {
        System.out.println("dir: " + treeWalk.getPathString());
        treeWalk.enterSubtree();
    } else {
        System.out.println("file: " + treeWalk.getPathString());
    }
}