我有以下git命令:
git log --stat=1000 --all > gitstat.log
Run Code Online (Sandbox Code Playgroud)
有可能在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
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,RevWalk调用的实例parseCommit()必须与调用的实例相同markStart()。否则,RevWalk将产生有趣的结果。
提交(并由此访问其父级)后,您可以使用DiffFormatter来获取Diffs和Edits 的列表,该列表表明更改了每个文件多少个文件和行。
您可能需要看一下这篇文章才能开始:如何使用JGit显示两次提交之间的更改
这里是一篇深入介绍JGit的diff API的文章:http : //www.codeaffine.com/2016/06/16/jgit-diff/