如何使用 JGit 获取从某个特定日期到当前日期的特定类型的提交
How to get specific type of commits from some specific date to current date using JGit
使用 JGit 框架,我想收集带有一些特定提交消息的提交列表,例如从日期范围内以模式“[EA-”开始提交,例如从 24.01.2018 到 git、git 日志中的当前日期 --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)
将提交限制在所需的日期范围内。
进一步过滤某些消息,或 select 匹配消息,同时遍历 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 中使用提交过滤器的问题:
- How do I use filters in jGit?
使用 JGit 框架,我想收集带有一些特定提交消息的提交列表,例如从日期范围内以模式“[EA-”开始提交,例如从 24.01.2018 到 git、git 日志中的当前日期 --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)
将提交限制在所需的日期范围内。
进一步过滤某些消息,或 select 匹配消息,同时遍历 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 中使用提交过滤器的问题:
- How do I use filters in jGit?