当前位置: 首页 > 面试题库 >

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

章侯林
2023-03-14
问题内容

我有以下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
  }
}

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

提交(并由此访问其父项)后,您可以使用DiffFormatter来获取Diffs和Edits
的列表,这些列表可以告诉您更改了多少个文件和每个文件行。

您可能需要看一下这篇文章才能开始:如何使用JGit显示两次提交之间的更改

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



 类似资料:
  • 我想为Atom编写一个命令,它由两个或多个预先存在的命令组成,比如“Select Line”和“Cut”。我该怎么做?

  • 问题内容: 我想知道stat命令如何计算文件的块。我读了 这篇文章,它说: 值st_blocks以512字节块为单位给出文件的大小。(例如,当文件有孔时,它可能小于st_size / 512。)值st_blksize给出了“首选”的块大小,以实现有效的文件系统I / O。(以较小的块写入文件可能会导致读取-修改-重写效率低下。) 但我无法在测试中验证它。 我的文件系统是ext3。 dumpe2fs

  • 问题内容: 如何在JGit中合并? 假设我要与分支合并,该怎么做? 问题答案: 要合并,您可以在之后使用(在org.eclipse.jgit.api包中)。为了给您提供示例,因为Jgit确实缺少示例: 我没有尝试该代码,因此它可能并不完美,但这只是一个开始。而且我没有包括进口。使用JGit开发意味着基于Javadoc的许多尝试

  • 问题内容: 我有一个函数要转换为 ES6中 的新箭头语法。它是一个命名函数: 有没有办法在不使用var语句的情况下为其命名: 显然,我只能在定义此功能后使用它。如下所示: ES6中 是否有新方法可以做到这一点? 问题答案: 如何在ES2015中编写命名箭头功能? 您可以按照在问题中排除的方式进行操作:将其放在赋值或属性初始化程序的右侧,在该赋值或属性初始化程序中,JavaScript引擎可以合理地

  • 我有一个函数,我正在尝试转换为ES6中的新箭头语法。它是一个命名函数: 有没有办法给它一个没有var语句的名字: 显然,我只能在定义了这个函数之后才能使用它。大致如下: 在ES6中有没有一种新的方法可以做到这一点?

  • 上面给出的很多都是nodejs写的小工具模块,nodejs和npm的种种好处,使得nodejs开发命令行模块异常简单 先说一下node module的作用 封装常见类库 命令行工具 nodejs这几年之所以如此快的崛起,就是因为模块编写简单,npm无比强大 npm是nodejs最好的东西,常用分类 1)命令行工具 比如express-generator 比如gulp 和grunt 2)shell相