如何在 JGit 中编写 git log --stat 命令
How to write git log --stat command in JGit
我有以下 git 命令:
git log --stat=1000 --all > gitstat.log
是否可以在 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
}
}
注意调用parseCommit()
的RevWalk
实例必须与调用markStart()
的实例相同。否则,RevWalk
会产生有趣的结果。
一旦你有一个提交(并通过这个,访问它的父级)你可以使用 DiffFormatter
来获得一个 Diff
s 和 Edit
s 的列表,告诉如何许多文件和每个文件的行已更改。
您可能需要查看此 post 以开始:How to show changes between commits with JGit
这里有一篇深入介绍 JGit 差异 API 的文章:http://www.codeaffine.com/2016/06/16/jgit-diff/
我有以下 git 命令:
git log --stat=1000 --all > gitstat.log
是否可以在 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
}
}
注意调用parseCommit()
的RevWalk
实例必须与调用markStart()
的实例相同。否则,RevWalk
会产生有趣的结果。
一旦你有一个提交(并通过这个,访问它的父级)你可以使用 DiffFormatter
来获得一个 Diff
s 和 Edit
s 的列表,告诉如何许多文件和每个文件的行已更改。
您可能需要查看此 post 以开始:How to show changes between commits with JGit
这里有一篇深入介绍 JGit 差异 API 的文章:http://www.codeaffine.com/2016/06/16/jgit-diff/