自上次tag命令以来,JGit等效于git提交

时间:2017-09-18 18:58:43

标签: git jgit git-describe

鉴于此git命令while read L < filelist; do echo "${L:10}"; done

我很想拥有JGit中的等价物。 我找到了类似git log ``git describe --tags --abbrev=0``..HEAD --oneline的方法,但无法弄清楚它所期望的值类型或我可以在API中git.log().addRange()上调用的位置。 我尝试了git describe但是链接方法对我来说对于本机git CLI API没有任何意义。

1 个答案:

答案 0 :(得分:1)

我也无法理解DescribeCommand输出。因此,我建议解决DescribeCommand并从HEAD向后迭代历史记录,如下所示:

Collection<Ref> allTags = git.getRepository().getRefDatabase().getRefs( "refs/tags/" ).values();
RevWalk revWalk = new RevWalk( git.getRepository() );
revWalk.markStart( revWalk.parseCommit( git.getRepository().resolve( "HEAD" ) ) );
RevCommit next = revWalk.next();
while( next != null ) {
  // ::pseudo code:: 
  // in real, iterate over allTags and compare each tag.getObjectId() with next
  if( allTags.contains( next ) ) { 
    // remember next and exit while loop
  }
  next = revWalk.next();
}
revWalk.close();

请注意,带注释的标签需要不剥离:List commits associated with a given tag with JGit

获得标记提交后,您可以将结果提供给LogCommand,如下所示:

ObjectId headCommitId = git.getRepository().resolve( "HEAD" );
Iterable<RevCommit> commits = git.log().addRange( headCommitId, taggedCommit ).call();

这有点模糊,但我希望帮助你入门。