如何使用NGit获取实际标签



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

我试图列出 Git 标签

foreach(var tag in git.GetRepository().GetTags()){
}

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

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(键)和指向它的第一个可以找到的引用(值)。

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

编辑 2016-07-11

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

请参阅我对这个问题的回答,了解查找标签指向的提交 ID 的特殊性: 使用 JGit 列出与给定标签关联的提交

相关内容

  • 没有找到相关文章

最新更新