git: можно ли видеть удаленные теги с аннотациями без клонирования?

#git #annotations #tags

#git #аннотации #Теги

Вопрос:

Я хотел бы видеть удаленные теги с аннотациями, ничего не загружая.

Я знаю, что могу видеть удаленные теги, например git ls-remote --tags origin , с помощью, но это не показывает аннотации.

Я также знаю, что могу видеть аннотации с помощью, например git tag -n , , но для этого потребуется извлечь теги раньше.

Есть ли способ добиться этого?

Комментарии:

1. Нет. Протокол GIt не позволяет извлекать аннотации тегов удаленно. Если репозиторий размещен на сайте, который поддерживает дополнительный API, вы можете использовать API. Например, вы можете перечислить «релизы» (созданные для каждого тега) на Github ; результаты включают ключ "body" .

2. Спасибо @phd. Репозиторий находится в Azure DevOps. Я попытаюсь посмотреть, есть ли для этого API.

Ответ №1:

Для Azure DevOps вы действительно можете использовать API для:

1/ Список тегов

 GET https://dev.azure.com/fabrikam/_apis/git/repositories/{repositoryId}/refs?filter=tags/amp;api-version=6.0
  

Это даст вам их ObjectId

2/ Для каждого идентификатора объекта тега запрашивайте сам аннотированный тег

 GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/annotatedtags/{objectId}?api-version=6.0-preview.1
  

Вы получите GitAnnotatedTag , который включает message в себя: Сообщение о тегировании.

Ответ №2:

Ну, вы должны загрузить хотя бы аннотации тегов, верно? Они находятся в аннотированных тегах, и вы можете довольно резко ограничить свой фильтр выборки. Проще всего --filter=blob:none , но если сервер поддерживает его (github пока нет), вы действительно можете ограничить трафик выборки --filter=combine:blob:none tree:0 .

В любом случае, тот, который не запрашивает больше, чем реализовал github, это

 git init `mktemp -d`
cd $_
git fetch --filter=tree:0 u://r/l
git rev-list --tags --no-walk | git cat-file --batch
  

Как указывает @VonC, любой может предоставить любой веб-интерфейс (или другой интерфейс transpsort), который они хотят использовать в репозитории, и предоставить интерфейс для всего, что они захотят предоставить. Git не предназначен для предоставления веб-интерфейсов для удаленных данных, речь идет о том, чтобы получить локальные данные, чтобы вы могли использовать их по своему усмотрению.