gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:48:25 24 4
gpt4 key购买 nike

使用 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() 方法?

最佳答案

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 中使用提交过滤器的问题:

关于java - 如何使用 JGit 获取从某个特定日期到当前日期的特定类型的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60933652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com