我是jGit和Git的新手。我正在尝试查询git存储库的提交历史,但我想只获得特定用户的提交。阅读文档我看到RevWalk将允许我添加RevFilters以限制搜索。
首先,我使用Git对象及其日志方法列出提交,并且它运行良好。但是使用RevWalk,没有任何反应。
public static void main(String[] args) throws IOException, GitAPIException {
FileRepositoryBuilder builder = new FileRepositoryBuilder();
Repository repository = builder.setGitDir(new File("/home/joan/testGit/testMockito/.git"))
.readEnvironment().findGitDir().build();
//This works but I get all the commits
Git git = new Git(repository);
Iterable<RevCommit> log = git.log().call();
for (Iterator<RevCommit> iterator = log.iterator(); iterator.hasNext();) {
RevCommit rev = iterator.next();
System.out.println(rev.getAuthorIdent().getName());
System.out.println(rev.getFullMessage());
}
RevWalk walk = new RevWalk(repository);
for (Iterator<RevCommit> iterator = walk.iterator(); iterator.hasNext();) {
//It never cames in this block
RevCommit rev = iterator.next();
System.out.println(rev.getAuthorIdent().getName());
System.out.println(rev.getFullMessage());
}
}
有什么建议吗?我做错了吗?
感谢。
答案 0 :(得分:9)
在迭代之前,您需要通过调用RevWalk
向markStart
添加提交。
例如,使用当前存储库的RevWalk
提交启动HEAD
:
walk.markStart(walk.parseCommit(repository.resolve("HEAD")));
答案 1 :(得分:2)
为什么不使用LogCommand
中的org.eclipse.jgit.api
?
Git git = new Git(db);
Iterable<RevCommit> log = git.log().call();
然后,您可以根据您获得的提交过滤作者。我还建议看看Gitective,它是JGit之上的一层。您可以学习如何使用它来实现与JGit相关的东西:https://github.com/kevinsawicki/gitective/
你可以这样做:
PersonIdent person = new PersonIdent("Chris", "chris@chris.com");
filters.add(new AuthorFilter(person));
然后您可以使用所需的过滤器调用CommitFinder
...