我有以下 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/