Может ли легкий тег быть преобразован в аннотированный тег?
Я пометил фиксацию легким тегом и нажал этот тег на удаленное репо, которое было передано другим разработчикам. Теперь я понял, что должен был аннотировать его так, чтобы он отображался в git describe
.
Есть ли способ его конвертировать/повторно тегировать, не нарушая вещи?
Ответы
Ответ 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