JGit Обходит локальные и удаленные ветки только HEAD и читает файлы

Я хочу просмотреть мой репозиторий git, но только фиксацию HEAD, включая удаленные ветки. У меня есть только локальная основная ветка и много удаленных веток. Я могу перемещаться по моему действительно рабочему каталогу, например.

    Ref head = repository.getRef("HEAD");
    RevWalk walk = new RevWalk(repository);

    RevCommit commit = walk.parseCommit(head.getObjectId());
    RevTree tree = commit.getTree();

    TreeWalk treeWalk = new TreeWalk(repository);
    treeWalk.addTree(tree);
    treeWalk.setRecursive(true);
    while (treeWalk.next()) {
        System.out(treeWalk.getPathString())
    }
    repository.close();

Но этот код проходит только по фактическому рабочему каталогу. После этого я хочу прочитать файлы в головной фиксации. Как выполнить чтение и обход ветвей?


person Sadik Hasan    schedule 13.01.2014    source источник


Ответы (2)


Используйте RefDatabase#getRefs для просмотра существующих ссылок:

RefDatabase refDatabase = repository.getRefDatabase();
Map<String, Ref> refs = refDatabase.getRefs(Constants.R_REMOTES);
for (Ref remoteRef : refs) {
    // ...
}

Аргумент getRefs — это префикс для получения только определенных ссылок, вы также можете использовать RefDatabase.ALL для получения всех ссылок.

Чтобы прочитать содержимое файла, пройдитесь по дереву, как в коде из вопроса. Затем с помощью объекта TreeWalk можно прочитать содержимое. См. этот ответ из Как «котировать» файл в JGit? вопрос.

person robinst    schedule 13.01.2014
comment
Я становлюсь списком origin/branch_* и refs/remote/origin/branch_*, но как я могу перебирать содержимое ветвей? - person Sadik Hasan; 14.01.2014
comment
Точно так же вы перебираете содержимое HEAD в вопросе. Я также добавил в ответ инструкции о том, как получить содержимое файла. - person robinst; 14.01.2014

Хорошо, этот код показывает мне весь контент, но не в том порядке, в котором я хочу. Он начинается со случайной удаленной ветки.

for (Map.Entry<String, Ref> entry : refList.entrySet()) {
            Ref head = repository.getRef(entry.getValue().getName());
            RevWalk walk = new RevWalk(repository);
            RevCommit commit = walk.parseCommit(head.getObjectId());
            RevTree tree = commit.getTree();
            TreeWalk treeWalk = new TreeWalk(repository);
            treeWalk.addTree(tree);
            treeWalk.setRecursive(true);
            while (treeWalk.next()) {
                    ObjectId objectId = treeWalk.getObjectId(0);
                    ObjectLoader loader = repository.open(objectId);
                    loader.copyTo(System.out);
            }
}
person Sadik Hasan    schedule 20.01.2014