Как получить актуальный тег с помощью 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