我有以下git命令:
git log --stat=1000 --all > gitstat.log
是否可以在JGit中实现这一目标?
如果是,在JGit中写这个的等效方法是什么?
答案 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
获取一个DiffFormatter
和Diff
的列表来告诉你有多少文件每个文件的行数已更改。
您可能需要查看此帖子才能开始使用:How to show changes between commits with JGit
这里有一篇文章深入介绍了JGit的差异API:http://www.codeaffine.com/2016/06/16/jgit-diff/