1

给定这个 git 命令git log ``git describe --tags --abbrev=0``..HEAD --oneline

我很想在 JGit 中有等价物。我找到了类似的方法,git.log().addRange()但无法弄清楚它期望什么样的值,或者我可以git describe在 API 中的哪个位置进行调用。我尝试过git.describe(),但是对于本机 git CLI API,链接方法对我没有任何意义。

4

1 回答 1

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();

这有点含糊,但我希望它可以帮助您入门。

于 2017-09-18T19:49:26.110 回答