Java jGit使用RevWalk获取RevCommit不会返回任何结果
我是jGit和Git的新手。我试图查询git存储库提交的历史记录,但我只想获得特定用户的提交。阅读我看到的文档,RevWalk将允许我在orther中添加RevFilters以限制搜索 首先,我使用Git对象及其log方法来列出提交,它工作得非常好。但是使用RevWalk,什么都不会发生Java jGit使用RevWalk获取RevCommit不会返回任何结果,java,git,jgit,Java,Git,Jgit,我是jGit和Git的新手。我试图查询git存储库提交的历史记录,但我只想获得特定用户的提交。阅读我看到的文档,RevWalk将允许我在orther中添加RevFilters以限制搜索 首先,我使用Git对象及其log方法来列出提交,它工作得非常好。但是使用RevWalk,什么都不会发生 public static void main(String[] args) throws IOException, GitAPIException { FileRepositoryBuilder bu
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());
}
}
publicstaticvoidmain(字符串[]args)抛出IOException、GitAPIException{
FileRepositoryBuilder=新建FileRepositoryBuilder();
Repository Repository=builder.setGitDir(新文件(“/home/joan/testGit/testMockito/.git”))
.readEnvironment().findGitDir().build();
//这是可行的,但我得到了所有的承诺
Git-Git=新的Git(存储库);
Iterable log=git.log().call();
for(Iterator Iterator=log.Iterator();Iterator.hasNext();){
RevCommit rev=iterator.next();
System.out.println(rev.getAuthorIdent().getName());
System.out.println(rev.getFullMessage());
}
RevWalk walk=新的RevWalk(存储库);
for(Iterator Iterator=walk.Iterator();Iterator.hasNext();){
//它从未出现在这个街区
RevCommit rev=iterator.next();
System.out.println(rev.getAuthorIdent().getName());
System.out.println(rev.getFullMessage());
}
}
有什么建议吗?我做错什么了吗
谢谢。为什么不直接使用
org.eclipse.jgit.api
中的LogCommand
Git-Git=new-Git(db)代码>
Iterable log=git.log().call()代码>
然后,您可以根据返回的提交筛选作者。我还建议查看GitRective,它是JGit之上的一层。您可以学习如何使用它实现与JGit相关的事情:
你可以这样做:
PersonIdent person=新的PersonIdent(“克里斯”chris@chris.com");代码>
filters.add(新AuthorFilter(person))代码>
然后您可以调用CommitFinder
。。。使用所需的筛选器…您需要在迭代之前通过调用markStart
将提交添加到RevWalk
例如,要使用当前存储库的头启动RevWalk
,请执行以下操作:
walk.markStart(walk.parseCommit(repository.resolve(“HEAD”))代码>谢谢凯文。你说得对,我已经添加了标题,并且我已经得到了提交列表。:)