JGit检索已从中创建新分支的标记名称

时间:2014-08-02 16:10:44

标签: jgit

使用标记作为起点创建新分支时,假设为MyTag,结果分支处于分离状态。

是否可以使用JGit API检索新分支所在的标记名称?

我将实现一个类似于git status的命令,可以打印:

HEAD detached at MyTag

1 个答案:

答案 0 :(得分:0)

不存储分支(或更一般地,任何参考)的起点。基本上,分支或标记只是某个commit-id上的标签 - 当然,提交可以有多个标记或分支。

NameRevCommand可以帮助您找到给定提交的可读名称。

RevCommit headCommit = git.commit().setMessage( "initial" ).call();
git.tag().setObjectId( headCommit ).setName( "mytag" ).setMessage( "tag on initial" ).call();
git.branchCreate().setName( "mybranch" ).setStartPoint( "refs/tags/mytag" ).call();

Map<ObjectId, String> names = git.nameRev().addPrefix( "refs/tags/" ).add( headCommit ).call();

System.out.println( names.get( headCommit.getId() ) );

以上代码段将为mytag返回headCommit。请注意,标记名称的首选项设置为addPrefix( "refs/tags/" )

但请注意,一旦在新分支上进行进一步提交,mytag的相关性将会丢失。

BTW,从标签创建的分支不会必须导致分离状态。