Этот вопрос о том, как получить имя тега, который был клонирован, для перехода в состояние отключенного HEAD, а не о том, как восстановить его из состояния отключенного HEAD.
У нас есть система сборки, которая клонирует различные git репо по тегам, которые используются в качестве версий. Каждый репозиторий создает выходной файл с версией по имени тега. Это работает достаточно хорошо, но проблема возникает, когда есть два тега на одном коммите. Используемые команды git не справляются с этой ситуацией.
Например, у меня есть репозиторий с двумя тегами версий на одном коммите.
git init
touch .gitignore
git add .
git commit -am "Initial commit"
git tag release-v1
git tag release-v2
Если я хотел построить это репозиторий с версией "release-v2", наша система сборки проверила бы этот репозиторий следующим образом:
git clone --single-branch --depth 1 -b release-v2 repo.git
Из Makefile внутри репозитория мы используем эту команду чтобы получить версию из имени тега:
VERSION := $(shell git describe --abbrev=0 --tags)
Эта команда, кажется, всегда указывает на первый тег "release-v1", но не обязательно на клонированный тег.
Я нашел эту команду, которая возвращает оба тега, но она все еще не сообщает мне, какой тег был клонирован.
$ git tag --contains $(git rev-parse HEAD)
release-v1
release-v2
Есть ли альтернативная команда, которая всегда возвращает тег, который репозиторий был клонирован или даже git даже не знает, что, поскольку тег просто указывает на идентификатор фиксации?
Эта система сборки очень индивидуальна и определенно имеет некоторые проблемы, поэтому я открыт для альтернативных методов извлечения вообще, если это не требует слишком большого количества больших изменений.