Изменить соглашение об именах тегов внутри репозитория git?

У меня есть репозиторий git, который содержит несколько тегов с форматом "v1.2.3-rc-4", который я хотел бы автоматически переименовать в "1.2.3-rc4". Теги существуют как в локальных, так и в удаленных репозиториях.

Я должен уточнить, что числовые компоненты в номере версии должны рассматриваться как переменные. Вышеуказанные значения просто демонстрируют формат тегов.

Есть ли способ автоматизировать это изменение?

Ответ 1

Чтобы перечислить все теги, я бы рекомендовал git for-each-ref с опцией --shell для eval refs.
Объедините его с одним слоем для переименования/удаления тега.

#!/bin/sh

git for-each-ref --shell --format="ref=%(refname:short)" refs/tags | \
while read entry
do

    # assign tag name to $ref variable
    eval "$entry"

    # test if $ref starts with v
    ref2="${ref#v}"
    if [[ "${ref}" != "${ref2}" ]]; then

        # rename/delete tag
        git push origin refs/tags/${ref}:refs/tags/${ref2} :refs/tags/${ref}
        git tag -d ${ref}
    fi

done