簡體   English   中英

如何使用 JGit 從某個特定日期到當前日期獲取特定類型的提交

[英]How to get specific type of commits from some specific date to current date using JGit

使用 JGit 框架,我想收集帶有一些特定提交消息的提交列表,例如從一個日期范圍內以模式“[EA-”開頭的提交,例如從 24.01.2018 到當前日期,如 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() 方法?

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 中使用提交過濾器的問題:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM