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

时间:2016-11-24 23:32:48

标签: java jgit

我有以下git命令:

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

是否可以在JGit中实现这一目标?

如果是,在JGit中写这个的等效方法是什么?

1 个答案:

答案 0 :(得分:4)

要访问存储库的历史记录,JGit会提供@keyframe。其RevWalk方法用于指定历史应该从哪些提交开始。 可以使用markStart()获取存储库中的所有引用。

正确设置RevWalk实例后,请使用其迭代器或其Repository::getAllRefs()方法遍历历史记录。

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

next()

请注意,调用Collection<Ref> allRefs = repository.getAllRefs().values(); RevWalk revWalk = new RevWalk( repository ); for( Ref ref : allRefs ) { revWalk.markStart( revWalk.parseCommit( ref.getObjectId() )); } for( RevCommit commit : revWalk ) { // print commit metadata and diff } revWalk.close(); 的RevWalk实例必须与调用parseCommit()的实例相同。否则,markStart()将产生有趣的结果。

一旦你有了提交(通过这个,访问它的父级),你可以使用RevWalk获取一个DiffFormatterDiff的列表来告诉你有多少文件每个文件的行数已更改。

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

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