如何使用filepath列出JGit中的提交

时间:2017-12-29 06:01:15

标签: jgit git-log

我想列出Java中本地Git存储库的提交。所以我使用下面的代码来做到这一点:

Iterable<RevCommit> commits = git.log().all().call();

但是我还需要在git log中提交并列出的每个文件的路径。

2 个答案:

答案 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()一样。