如何使用JGit从特定日期到当前日期获取特定类型的提交

问题描述 投票:0回答:1

使用JGit框架,我想收集带有一些特定提交消息的提交列表,例如从日期范围内以“ [EA-””模式开始提交从2018年1月24日到当前日期,如git,git log --since = 2018-01-24 --until = 2020-03.30 --grep = [EA-。我尝试了以下方法:

    String path = "C:/path_to_repo";
    FileRepositoryBuilder repositoryBuilder = new FileRepositoryBuilder();
    Repository repo = repositoryBuilder.setGitDir(new File(path, ".git")).findGitDir().build();
    Git git = new Git(repo);
    ObjectId start;
    ObjectId end;
    Iterable<RevCommit> call = git.log().addRange(start, end).call();

这是正确的做法吗?其次,如何将正确的参数传递给addRange()方法?

java git jgit
1个回答
0
投票

JGit的log命令不支持对日期范围和消息模式进行过滤。

您将需要使用RevWalk手动遍历历史记录。可以添加过滤器以限制生成的提交。使用CommitTimeRevFilter.between(since, until)将提交限制在所需的日期范围内。

在迭代RevWalk的提交时进一步过滤某些消息,或选择匹配的消息。

这里是一个入门的示例:

try (RevWalk walk = new RevWalk(repo)) {
  walk.markStart(walk.parseCommit(repo.resolve(Constants.HEAD)));
  walk.sort(RevSort.REVERSE);
  walk.setRevFilter(CommitTimeRevFilter.between(since, until));
  for(RevCommit commit : walk) {
    if (commit.getFullMessage().contains(...)) {
      // include commit in result
    }
  }
}

或者,您可以扩展RevFilter来编写自定义消息过滤器,并使用AndRevFilter将此过滤器与日期范围过滤器组合。

另请参阅有关在JGit中使用提交过滤器的问题:

© www.soinside.com 2019 - 2024. All rights reserved.