如何删除不在本地存储库中的远程标签?

mim*_*lea 5 regex git bash grep

我想让原产地与我的本地标签相匹配。这不要与修剪本地标签混淆,而是与修剪远程标签混淆。

要修剪本地标签并使我的本地存储库与原点匹配,我会执行以下操作:

git tag -l | xargs git tag -d
git fetch
Run Code Online (Sandbox Code Playgroud)

我在本地清理了标签,我想推送和删除远程没有的东西。

我一直在手动进行,例如:

git tag -l | grep -v "[^v2]" | xargs git tag -d  # remove local tags that don't match a pattern
git push origin :refs/tags/2.2.15      # manually remove those tags on remote
git push origin :refs/tags/2.2.16
git push origin :refs/tags/2.2.17
git push origin :refs/tags/2.2.18
...
Run Code Online (Sandbox Code Playgroud)

但是有这么多标签,我觉得这可以做不同的事情。那么问题是,如何从远程存储库中删除那些您在本地没有的标签?

Tra*_*vis 3

刚刚在远程仓库上测试了它,它工作正常。

我使用cut代替grep,并将远程标签与本地标签进行比较,然后删除不同的远程标签。

git ls-remote --tags origin | cut -f 2 | xargs basename | comm -23 - <(git tag) | awk '{print ":refs/tags/" $0}'  | xargs git push origin
Run Code Online (Sandbox Code Playgroud)

这不是世界上最优雅的事情,但它确实有效。