Как получить актуальный тег с помощью NGit?

Мне нужно знать текущий тег с NGit в отдельной ветви (после git checkout tagname)

Я пытался перечислить теги Git с

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

}

но я не смог найти, как связать этот тег с последним коммитом.

1 ответ

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 перечислить все ссылки, которые указывают на этот идентификатор коммита.

addPrefix() ограничивает ссылки на тех, кто в refs/tags/ Пространство имен.

Возвращенная Карта содержит идентификатор фиксации (ключ) и первый указатель на него, который может быть найден (значение).

В вашем случае, тег, который вы извлекли ранее, должен быть среди возвращенных ссылок. Будьте осторожны, если для этой фиксации было создано несколько тегов, любой из них может быть возвращен - не обязательно тот, который был извлечен ранее.

РЕДАКТИРОВАТЬ 2016-07-11

Кроме того, вы можете получить список всех тегов из хранилища с помощью git.tagList().call() и найдите тег, который указывает на коммит, о котором идет речь.

Смотрите мой ответ на этот вопрос, чтобы узнать особенности поиска идентификатора коммита, на который указывает тег: Список коммитов, связанных с данным тегом с помощью JGit

Другие вопросы по тегам