Изменить соглашение об именах тегов в репозитории git?
У меня есть git-репозиторий, который содержит несколько тегов в формате "v1.2.3-rc-4", которые я хотел бы автоматически переименовать в "1.2.3-rc4". Теги существуют как в локальном, так и в удаленном репозиториях.
Я должен уточнить, что числовые компоненты в номере версии должны рассматриваться как переменные. Вышеуказанные значения просто для демонстрации формата тегов.
Есть ли способ автоматизировать это изменение?
1 ответ
Чтобы перечислить все теги, я бы порекомендовал git for-each-ref
с --shell
возможность оценить ссылки.
Объедините его с одной строкой, чтобы переименовать / удалить тег.
#!/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
Следуйте трехэтапному подходу для одного или нескольких тегов. Для большого количества тегов вышеприведенный скрипт может быть изменен, чтобы использовать следующие 3 шага в качестве альтернативного решения.
Шаг 1: Определите идентификатор коммита / объекта для коммита, на который указывает текущий тег
command: git rev-parse <tag name>
example: git rev-parse v0.1.0-Demo
example output: db57b63b77a6bae3e725cbb9025d65fa1eabcde
Шаг 2: Удалить тег из хранилища
command: git tag -d <tag name>
example: git tag -d v0.1.0-Demo
example output: Deleted tag 'v0.1.0-Demo' (was abcde)
Шаг 3. Создайте новый тег, указывающий на тот же идентификатор фиксации, на который указывал старый тег
command: git tag -a <tag name> -m "appropriate message" <commit id>
example: git tag -a v0.1.0-full -m "renamed from v0.1.0-Demo" db57b63b77a6bae3e725cbb9025d65fa1eabcde
example output: Nothing or basically <No error>
Когда локальный git готов к изменению имени тега, эти изменения могут быть перенесены обратно в источник, чтобы другие могли их принять.