Java 使用JGit获取修订版中的文件列表

Java 使用JGit获取修订版中的文件列表,java,jgit,Java,Jgit,有人知道如何使用JGITAPI获取文件列表吗?我尝试在本地存储库上找到类似的函数,如使用git show命令,例如 git ls-tree -r --name-only 7feff221f86e040f0cd2e4227e9e1496fe16f376 我有一些这样的代码 File gitDir = new File("/Users/xiansongzeng/NIOServer"); Git git = Git.open(gitDir); Repository r

有人知道如何使用JGITAPI获取文件列表吗?我尝试在本地存储库上找到类似的函数,如使用
git show
命令,例如

    git ls-tree -r --name-only 7feff221f86e040f0cd2e4227e9e1496fe16f376
我有一些这样的代码

    File gitDir = new File("/Users/xiansongzeng/NIOServer");
    Git git = Git.open(gitDir);
    Repository repo = git.getRepository();

    ObjectId lastCommitId = repo.resolve("7feff221f86e040f0cd2e4227e9e1496fe16f376");
    RevWalk revWalk = new RevWalk(repo);
    RevCommit commit = revWalk.parseCommit(lastCommitId);
    RevTree tree= commit.getTree();
    TreeWalk treeWalk = new TreeWalk(repo);
    treeWalk.addTree(tree);
    treeWalk.setRecursive(true);

    treeWalk.setFilter(PathFilter.create("src/main/java/nds/socket/server/Reader.java"));
    if(!treeWalk.next()){
        System.out.println("Not found.");
        return;
    }
    ObjectId objectId = treeWalk.getObjectId(0);

此代码以本地存储库为目标,使用
RevWalk
遍历上次提交的修订树。我发现这个示例使用
PathFilter
获取文件的引用,但不知道如何获取所有Java文件的列表。欢迎您提出任何建议。

在测试从
getPathString
返回的路径时,建议使用树过滤器,如
PathSuffixFilter.create(.java”)


原因是
getPathString
必须解码路径(内部是
byte[]
),而
PathSuffixFilter
直接在
byte[]
上工作ls树在JGit中实现: 用法是

jgit ls树[-r |--递归][--路径…]

cat文件很简单()


我实际上检查了treeWalk.next()并使用了treeWalk.getPathString(),可以得到所有文件的列表,我应该比较包含“.java”的长字符串还是使用其他东西?非常感谢。这是一种更好的方法。这几周我看了太多的API,感到头晕。这是最复杂的。是的,API很强大,但也可能很复杂。你有什么改进的建议吗,或者在哪里添加更多的文档?我是一个使用git api的新手,我发现它很难使用,因为在线教程很少,有些教程使用的是不推荐的api。我喜欢Google javaparser项目的实现方式。它将接口和抽象类分开,以清楚地告诉每个类和包的意图。我也认为jgit功能强大,但api还有改进的余地,讨论可能的更改的最佳场所是什么?@centic See,要么写入邮件列表,要么在Bugzilla中提交新的增强功能。由于我们不想强迫现有用户更改他们的代码,所以彻底更改的提议可能会被拒绝。但我认为改进或添加的想法,或文档补丁都是受欢迎的。
  int type;
  if (argv[0].equals("blob"))
    type = Constants.OBJ_BLOB;
  ...

  ObjectId id = ObjectId.fromString(argv[1]);
  ObjectLoader ldr = db.open(id, type);
  byte[] tmp = new byte[1024];
  InputStream in = ldr.openInputStream();
  int n;
  while ((n = in.read(tmp)) > 0)
    System.out.write(tmp, 0, n);
  in.close();