自上次标记命令以来 git 提交的 JGit 等价物

JGit equivalent for git commits since last tag command

鉴于此 git 命令 git log ``git describe --tags --abbrev=0``..HEAD --oneline

我很想在 JGit 中拥有等效项。 我找到了像 git.log().addRange() 这样的方法,但无法弄清楚它期望什么样的值,或者我可以在哪里调用 API 中的 git describe。 我尝试了 git.describe(),但对于本机 git CLI API.

,链接方法对我来说没有任何意义

我也无法理解 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();

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