给定这个 git 命令git log ``git describe --tags --abbrev=0``..HEAD --oneline
我很想在 JGit 中有等价物。我找到了类似的方法,git.log().addRange()
但无法弄清楚它期望什么样的值,或者我可以git describe
在 API 中的哪个位置进行调用。我尝试过git.describe()
,但是对于本机 git CLI API,链接方法对我没有任何意义。
给定这个 git 命令git log ``git describe --tags --abbrev=0``..HEAD --oneline
我很想在 JGit 中有等价物。我找到了类似的方法,git.log().addRange()
但无法弄清楚它期望什么样的值,或者我可以git describe
在 API 中的哪个位置进行调用。我尝试过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();
这有点含糊,但我希望它可以帮助您入门。