如何在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
获取Diff
和Edit
的列表,告诉每个文件有多少文件和行被更改。
您可能希望查看此文章以开始: 如何使用JGit显示提交之间的更改
这里有一篇文章深入介绍了JGit的差异API: http : //www.codeaffine.com/2016/06/16/jgit-diff/