如何在Jgit中获取文件列表作为提交的一部分

时间:2017-10-13 10:17:08

标签: java jgit

我想获取属于提交的所有文件的列表。我有提交ID。

我查看了以下链接

How to get the file list for a commit with JGit

并尝试了以下代码。

TreeWalk treeWalk = new TreeWalk( repository );
treeWalk.reset( commit.getId() );
while( treeWalk.next() ) {
  String path = treeWalk.getPathString();
  // ...
}
treeWalk.close();

以及以下代码

try( RevWalk walk = new RevWalk( git.getRepository() ) ) {
  RevCommit commit = walk.parseCommit( commitId );
  ObjectId treeId = commit.getTree().getId();
  try( ObjectReader reader = git.getRepository().newObjectReader() ) {
    return new CanonicalTreeParser( null, reader, tree );
  }
}

通过上面的代码,我得到了分支中存在的所有文件的列表。 我需要在提交时删除,修改或添加的文件列表。

使用以下git命令,我成功获取了属于特定提交的文件列表

git diff-tree --name-only -r <commitId>

我想从JGit那里得到同样的东西。

更新: 我不希望得到两次提交之间的区别,但只有作为提交的一部分而更改的文件列表。

1 个答案:

答案 0 :(得分:1)

您可以使用Git.diff()命令。它需要两个Tree-Iterator:

mAdapter.notifyDataSetChange()

可以使用以下内容从commitId创建树迭代器:

    final List<DiffEntry> diffs = git.diff()
            .setOldTree(prepareTreeParser(repository, oldCommit))
            .setNewTree(prepareTreeParser(repository, newCommit))
            .call();

然后,您可以遍历生成的List并检索每个已更改/添加/删除的文件的详细信息。

另请参阅我的this sample中的jgit-cookbook以获取可运行的展示广告。