删除不再在远程存储库中的本地git标签

折月煮酒 提交于 2020-02-28 04:53:41

在部署过程中,我们在git中使用标签。 我们不时希望通过从远程存储库中删除它们来清理这些标记。

这很简单。 一个用户在一组命令中删除本地标签和远程标签。 我们有一个结合了两个步骤的小shell脚本。

现在,第二(第三,第四,...)用户具有不再反映在遥控器上的本地标签。

我正在寻找类似于git remote prune origin的命令,该命令将清除已删除远程分支的本地跟踪分支。

或者,可以使用一个简单的列出远程标签的命令来与通过git tag -l返回的本地标签进行比较。


#1楼

从Git v1.7.8到v1.8.5.6,您可以使用以下命令:

git fetch <remote> --prune --tags

更新资料

由于提交e66ef7ae6f31f2,这在较新版本的git(从v1.9.0开始)上不起作用 。 我真的不想删除它,因为它确实对某些人有用。

正如“ Chad Juliano”建议的那样,从v1.7.8开始,所有Git版本都可以使用以下命令:

git fetch --prune <remote> +refs/tags/*:refs/tags/*

您可能需要在标签部分加上引号(例如在Windows上),以避免通配符扩展:

git fetch --prune <remote> "+refs/tags/*:refs/tags/*"

#2楼

好问题。 :)我没有完整的答案...

也就是说,您可以通过git ls-remote获取远程标签列表。 要列出由origin引用的存储库中的标记,请运行:

git ls-remote --tags origin

这将返回哈希和友好标记名称的列表,例如:

94bf6de8315d9a7b22385e86e1f5add9183bcb3c        refs/tags/v0.1.3
cc047da6604bdd9a0e5ecbba3375ba6f09eed09d        refs/tags/v0.1.4
...
2f2e45bedf67dedb8d1dc0d02612345ee5c893f2        refs/tags/v0.5.4

当然,您可以将bash脚本放在一起,以比较此列表生成的标签与本地标签。 看一下git show-ref --tags ,它以与git ls-remote相同的形式生成标签名称。


git show-ref一句, git show-ref的选项与您想要的相反。 以下命令将列出您在本地没有的远程分支上的所有标签:

git ls-remote --tags origin | git show-ref --tags --exclude-existing

#3楼

怎么样-删除所有本地标签,然后重新获取? 考虑到您的回购可能包含子模块:

git submodule foreach --recursive  'git tag | xargs git tag -d'
(alternatively, "for i in `find .git  -type d -name '*tags*'`; do rm -f $i/*;  done")
git fetch -t
git submodule foreach --recursive git fetch -t

#4楼

如果只希望遥控器上存在的那些标签,只需删除所有本地标签:

$ git tag -d $(git tag)

然后获取所有远程标记:

$ git fetch --tags

#5楼

显示本地和远程标签之间的区别:

diff <(git tag | sort) <( git ls-remote --tags origin | cut -f2 | grep -v '\^' | sed 's#refs/tags/##' | sort)
  • git tag给出本地标签列表
  • git ls-remote --tags给出远程标签的完整路径列表
  • cut -f2 | grep -v '\\^' | sed 's#refs/tags/##' cut -f2 | grep -v '\\^' | sed 's#refs/tags/##'仅从远程标记路径列表中解析出标记名称
  • 最后,我们对两个列表中的每个列表进行排序并进行比较

以“ <”开头的行是您的本地标签,不再位于远程仓库中。 如果数量很少,则可以手动将它们手动删除,如果数量很多,则可以执行更多重复操作和管道操作以使其自动化。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!