如何用NGit获取实际标签?

时间:2016-07-07 19:07:55

标签: c# jgit ngit

我需要在分离的分支中知道当前带有NGit的标记(在git checkout tagname之后)

我试图用

列出Git标签
foreach(var tag in git.GetRepository().GetTags()){

}

但是我无法找到如何将此标记与上次提交相关联。

1 个答案:

答案 0 :(得分:0)

Git不存储当前检出的标签。如果要可靠地访问此信息,则需要在签出标签时单独存储它。

但是,您可以让Git列出指向某个提交的所有引用。

ObjectId headCommitId = repository.resolve( Constants.HEAD );
Map<ObjectId, String> refs = git.nameRev()
  .add( headCommitId )
  .addPrefix( Constants.R_TAGS )
  .call();

该代码段是用Java编写的,但应该很容易转换为C#。它首先解析HEAD引用,然后调用NameRevCommand列出指向此提交ID的所有引用。

addPrefix()将引号限制为refs/tags/名称空间中的引号。

返回的Map包含提交id(key)和指向它的第一个ref(可以找到)(值)。

在您的情况下,您之前签出的标记应该是返回的引用。请注意,如果为此提交创建了多个标记,则可以返回任何标记 - 不一定是之前检出的标记。

编辑2016-07-11

或者,您可以使用git.tagList().call()从存储库中获取所有标记的列表,并搜索指向相关提交的标记。

有关查找标记指向的提交ID的特殊性,请参阅我对此问题的回答:List commits associated with a given tag with JGit