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

标签 java 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 来获得 Diff 的列表和 Edit 指示更改了多少个文件和每个文件的行数。

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

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

关于java - 如何在JGit中编写git log --stat命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40795781/

相关文章:

java - JGit 错误-> 由 : java. 引起 lang.NoSuchMethodError: No virtual method toPath()

git - 我如何生成所有可能的 git-status?

java - 如何访问外部类的公共(public)方法以便在 JPanel 上重绘?

java - 重构 Java 代码以使其可重用

java - 如何将 OpenCV 库添加到动态 Web 项目

JGit:检索与git commit关联的标签

java - SubmoduleUpdateCommand getConfigUpdate() 返回 null

java - JGit稀疏 checkout 不断添加文件

java - 在 Java 中创建大型 csv 文件变得非常慢

java - 用户 MySQL Java Openshift 访问被拒绝