Ссылки (такие как теги) могут быть сохранены как отдельные файлы в .git/refs/**
, или они могут быть сохранены как «упакованные ссылки» в одном файле `.git / pack-refs
UpdatE - вопрос был отредактирован, чтобы добавить некоторую информацию о попытке добавить теги на основе RE*
ссылок. На данный момент кажется, что вы действительно спрашиваете, как создать теги для каждой из этих ссылок; пожалуйста, четко сформулируйте свой фактический вопрос вместо того, чтобы заставить нас угадать, что вы хотите знать.
Итак: тег - это ссылка, указывающая на некоторый объект в базе данных и помещаемая в пространство имен refs/tags/
. По соглашению ссылки в этом пространстве имен не должны «перемещаться» (если вообще вообще), и они становятся «именами» для объектов, на которые они указывают.
Команда git tag
принимает в качестве аргумента идентификатор - или выражение, которое разрешает - объект, на который должна указывать ссылка. Вы не дали этот аргумент, поэтому он пошел по умолчанию - HEAD
(фиксация, которая была проверена прямо сейчас).
(Из-за порядка используемых аргументов может показаться неочевидным, что вы не указали цель. Но вы указали параметр -a
, затем имя тега, затем параметр -m
с аннотацией, соответствующей имя тега.)
вместо
git for-each-ref --format='%(refname)' refs/remotes/tags | egrep "RE*" | cut -d / -f 4- | while read ref; do git tag -a "$ref" -m "$ref"; done
вы можете попробовать
git for-each-ref --format='%(refname)' refs/remotes/tags | egrep "RE*" | cut -d / -f 4- | while read ref; do git tag -a -m "$ref" "$ref" "refs/remotes/tags/$ref"; done
(Обратите внимание, что поскольку вы создаете аннотированный тег, ссылка на самом деле будет указывать на новый объект TAG
, который, в свою очередь, будет указывать на правильный коммит. Это нормально, но помните, что ссылка выиграла ' t указывает на идентификатор, который вы могли ожидать.)