2014-10-14 1 views

ответ

0

Невозможно получить цель аннотированного тега, используя только repo.Network.ListReferences.

Вы сначала должны получать те локально, либо:

  • Извлечение всех тегов (только новые/обновленные из них будут восстановлены). См. Это test для некоторых рекомендаций.
  • Выбор тех, которые вас интересуют, и использование перегрузки нижнего уровня Fetch(), которая принимает коллекцию refspecs и передает new[]{ "refs/tags/v0.1:refs/tags/v0.1", "refs/tags/v1.32:refs/tags/v1.32" }, например. См. Это test для получения некоторых советов о получении пользовательских refspecs.

Как узнать CommitId?

  • После ссылки выбираются локально решить тег (например. Tag myTag = repo.Tags["v1.32"];).

  • Когда тег аннотированный (то есть. Не легкий тег), то myTag.IsAnnotated свойство будет установлено на true и myTag.Annotation.Target будет указывать на GitObject указал на тэгом.

Если полученное GitObject является Commit, доступ к его свойству Id должен ответить на ваш вопрос.

Остерегайтесь того, что хотя это не часто встречающийся случай, тег может указывать на что-то еще, кроме Commit. Например, Blob или Tree. Можно даже найти в дикой природе, прикованный аннотированные метки (в этом случае, вы должны будете рекурсивно разрешить Target каждого , пока это не больше не .

FWIW, есть open up-for-grabs issue о обнажая дружественный способ, чтобы получить окончательные очищенные цели.

См TagFixture.cs тесты для более полного представления о манипуляции тегов с LibGit2Sharp.

+0

Спасибо большого @nulltoken :) – SJM

Смежные вопросы