Подтвердить что ты не робот

Может ли легкий тег быть преобразован в аннотированный тег?

Я пометил фиксацию легким тегом и нажал этот тег на удаленное репо, которое было передано другим разработчикам. Теперь я понял, что должен был аннотировать его так, чтобы он отображался в git describe.

Есть ли способ его конвертировать/повторно тегировать, не нарушая вещи?

4b9b3361

Ответ 1

Легкий тег - это всего лишь "ref", который указывает на фиксацию. Вы можете принудительно создать новый аннотированный тег поверх старого тега:

git tag -a -f <tagname> <tagname>

Как и в случае с Git v1.8.2, вам нужно использовать --force для замены любых тегов на удаленном компьютере с помощью git push, даже если вы заменяете легкий тег тем, что эффективно перемотка вперед или true tag, указывающий на тот же фиксатор, что и существующая ссылка на тег.

git push --force origin <tagname>

Ответ 2

Основываясь на ответе Чарльза и на этот пост в блоге, я думаю лучше использовать что-то вроде этого:

#!/bin/sh
tag=$1
date="$(git show $tag --format=%aD | head -1)"
GIT_COMMITTER_DATE="$date" git tag -a -f $tag $tag

Ответ 3

Вы также можете просто использовать git describe --tags, чтобы также включать в поиск легкие теги.

Ответ 4

Преобразуйте все теги в аннотированные (на основе примера Чарльза Бейли и замечания Ференца Вагнера):

for tag in $(git tag -l); do git tag -a -f $tag $tag^0 -m $tag; done
git push --tags --force