我想遍历我的git repo,但只需要包含远程分支的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();
但是这段代码只遍历实际的工作目录。 之后我想读取头部提交中的文件。 我如何进行阅读和遍历分支?
答案 0 :(得分:1)
使用RefDatabase#getRefs浏览现有的参考:
RefDatabase refDatabase = repository.getRefDatabase();
Map<String, Ref> refs = refDatabase.getRefs(Constants.R_REMOTES);
for (Ref remoteRef : refs) {
// ...
}
getRefs的参数是仅获取某些引用的前缀,您也可以使用RefDatabase.ALL
来获取所有引用。
要读取文件内容,请按照问题代码中的方式遍历树。然后,使用TreeWalk对象,可以读取内容。请参阅this answer问题中的How to “cat” a file in JGit?。
答案 1 :(得分:0)
好的,这段代码向我显示了所有内容,但没有按照我想要的正确顺序。 它从一个随机的远程分支开始。
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);
}
}