我想列出Java中本地Git存储库的提交。所以我使用下面的代码来做到这一点:
Iterable<RevCommit> commits = git.log().all().call();
但是我还需要在git log中提交并列出的每个文件的路径。
答案 0 :(得分:1)
解决方案对我有用:
ObjectReader or = repository.newObjectReader();
RevWalk rw = new RevWalk(or);
TreeWalk tw = new TreeWalk(or);
tw.setFilter(TreeFilter.ANY_DIFF);
tw.setRecursive(true);
ObjectId start = repository.resolve(Constants.HEAD);
startId = or.abbreviate(start);
rw.markStart(rw.parseCommit(start));
for(;;){
RevCommit c = rw.next();
if (c == null){
break;
}
if (c.getParentCount() != 1){
continue;
}
RevCommit p = c.getParent(0);
rw.parseHeaders(p);
tw.reset(p.getTree(), c.getTree());
while (tw.next()) {
System.out.println(tw.getPathString()+" id: "+c.getId());
}
}
答案 1 :(得分:0)
关于IncorrectObjectTypeException
,您确实有TreeWalk.reset()抛出该异常,因为来自Javadoc:
给定的对象ID不表示树,而是命名其他一些非树类型的对象。请注意,提交不是树,即使它们有时被称为“tree-ish”。
请参阅those examples of TreeWalk.reset
以了解如何从给定提交中访问树。与rev.getTree()
一样。