如何在 JGit 中编写 git log --stat 命令

How to write git log --stat command in JGit

我有以下 git 命令:

git log --stat=1000 --all > gitstat.log

是否可以在 JGit 中实现?

如果是,那么在 JGit 中等效的写法是什么?

为了访问存储库的历史记录,JGit 提供了 RevWalk。它的 markStart() 方法用于指定历史应该从哪个提交开始。 可以使用 Repository::getAllRefs().

获取存储库中的所有引用

设置 RevWalk 实例后,使用其迭代器或其 next() 方法遍历历史。

将它们放在一起看起来像这样:

try (RevWalk revWalk = new RevWalk(repository)) {
  for (Ref ref : repository.getAllRefs().values()) {
    revWalk.markStart(revWalk.parseCommit(ref.getObjectId()));
  }
  for (RevCommit commit : revWalk) {
    // print commit metadata and diff
  }
}

注意调用parseCommit()RevWalk实例必须与调用markStart()的实例相同。否则,RevWalk 会产生有趣的结果。

一旦你有一个提交(并通过这个,访问它的父级)你可以使用 DiffFormatter 来获得一个 Diffs 和 Edits 的列表,告诉如何许多文件和每个文件的行已更改。

您可能需要查看此 post 以开始:How to show changes between commits with JGit

这里有一篇深入介绍 JGit 差异 API 的文章:http://www.codeaffine.com/2016/06/16/jgit-diff/