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

我有以下git命令:

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

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

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

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

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

把它放在一起看起来像这样:

 Collection 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(); 

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

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

您可能希望查看此文章以开始: 如何使用JGit显示提交之间的更改

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