2014-10-06 63 views
4

我想让我的本地标签匹配来源。这不会与修剪本地标签相混淆,而是远程替代。如何删除不在本地存储库中的远程标签?

修剪当地标签,让我的本地库匹配起源我做的:

git tag -l | xargs git tag -d 
git fetch 

我打扫当地的标签,我想推和删除哪些是达不到的遥远。

我一直在做手工,如:

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 
... 

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

+1

[this](http://blog.siyelo.com/how-to-bulk-delete-remote-git-tags/)有帮助吗? – Travis 2014-10-06 20:57:40

+1

Yeap,我想是这样的... git ls-remote --tags origin | awk'/^(.*)(\s+)(.*[a-z])$/ {print“:”$ 2}'| xargs git push origin – mimoralea 2014-10-06 21:09:20

+0

'git ls-remote --tags origin | grep -v“[{} $]”| awk'{print':'$ 2}'' 我还没有能够测试删除,但该命令显示一个非常有前途的输出... – mimoralea 2014-10-06 21:27:57

回答

1

刚刚在远程回购测试它,它工作正常。

我用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 

不是世界上最优雅的东西,但它的工作原理。

+0

真棒,我一定会回顾这一点,当我需要它。谢谢! – mimoralea 2014-10-07 20:14:33

相关问题