我想遍历我的git仓库,但只有HEAD提交,包括远程分支。
我只有本地master分支和很多远程分支。
我可以遍历我的实际工作目录。
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();
但是此代码仅遍历实际的工作目录。
之后,我想在头提交中读取文件。
我如何执行阅读和遍历分支?
最佳答案
使用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?。