如何更改 Git 仓库中标签的命名规则?

5
我有一个包含很多以 "v1.2.3-rc-4" 格式命名的标签的 git 存储库,我想自动将它们重命名为 "1.2.3-rc4"。这些标签在本地和远程存储库中都存在。
需要澄清一点,版本号中的数字组件应视为变量。上述值仅用于演示标记格式。
是否有一种方法可以自动化此更改?

请查看此帖以重命名标签:https://dev59.com/N3NA5IYBdhLWcg3wQ7m4。要自动化,请编写一个bash脚本。 - bitoiu
2个回答

6
为了列出所有的标签,我建议使用带有--shell选项的git for-each-ref命令来评估引用。
结合一个一行命令以重命名/删除标签。
#!/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

谢谢,这非常有帮助 :D - Lea Hayes

1

对于一个或少数标签,请按照以下3个步骤进行。对于大量标签,可以修改上述脚本以使用下面的3个步骤作为替代解决方案。

步骤1:确定当前标签指向的提交/对象ID

     command: git rev-parse <tag name>
     example: git rev-parse v0.1.0-Demo
     example output: db57b63b77a6bae3e725cbb9025d65fa1eabcde

步骤二:从代码库中删除该标签。
     command: git tag -d <tag name>
     example: git tag -d v0.1.0-Demo
     example output: Deleted tag 'v0.1.0-Demo' (was abcde)

步骤三:创建一个新的标签,指向与旧标签相同的提交ID

     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 准备好更改标签名称后,这些更改可以推回到源代码库,以供其他人使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接