gpt4 book ai didi

git - 删除X个月之前的远程git标签

转载 作者:行者123 更新时间:2023-12-03 15:19:49 25 4
gpt4 key购买 nike

我正在尝试删除X个月以上的git标签

我们有需要保留的发布标签,它们都被标记为release-*,其中* = date
我知道如何删除单数标签git push origin :refs/tags/<tagName>
所以我推断出要删除所有远程标签
git ls-remote --tags origin | xargs git push origin :$1
要跳过我计划使用egrep -v的发布标签,请执行以下命令
git ls-remote --tags origin | egrep -v "(^\*|release*)" | xargs git push origin :$1
但是我至今还没有弄清楚如何做到这一点。

在本地,我可以按日期排序,例如git for-each-ref --sort=taggerdate --format '%(refname)' refs/tags | egrep -v "(^\*|release*)",但这对远程标记没有帮助。

如果有帮助,我不介意删除或不删除本地标签以删除远程标签。

最后,如果它提供了更好的清除方法,我们将使用gitlab?

无论如何,这都需要可以通过Jenkins像脚本一样运行,以帮助满足git清理的需求。

更新

因为我们有成千上万个git标签,所以我意识到xargs将会变得非常慢。

我相信删除的方式更有可能是
git push origin $(< git tag | <sorting_by_date + exclude release> \
| sed -e 's/^/:/' | paste -sd " ")

这样,该命令将基本上将:refs/tags/tag1 :refs/tags/tag2附加到单个命令中,而不是对每个标签进行唯一的删除并与远程服务器联系。

最佳答案

经过几天的研究,我找到了一个很好的解决方案。

首先按时间顺序收集所有git标签,我排除了release*标签
git for-each-ref --sort=taggerdate --format '%(refname:short) %(taggerdate:short)' refs/tags | egrep -v "(^\*|release*)"
这将给出以下输出

master_7 2017-12-05
master_8 2017-12-05
master_9 2017-12-07
master_10 2017-12-08
master_11 2017-12-08
update_framework_1 2017-12-12
master_12 2017-12-12
master_13 2017-12-13

因此,它是标记的名称,中间用空格隔开,然后是 YYYY-MM-DD格式的日期。如果您想要一个完整的日期或特定的内容,请使用适当的内容更新 taggerdate:short

然后,我获取输出,并逐行查看日期,并将其与我的截止日期进行比较。

这使我可以生成要删除的标签列表。

然后,我通过遍历标签列表并执行以下命令来运行删除操作
git push origin :refs/tags/<tag1> :refs/tags/<tag2>
我很安全地运行它,每隔50个标签运行一次命令,但是git似乎对此没有任何问题。

最后,所有删除操作完成后,我运行 git fetch --prune origin +refs/tags/*:refs/tags/*删除远程中不存在的所有本地标签。

在那里,所有标签都被清理了。

关于git - 删除X个月之前的远程git标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48629441/

25 4 0