我们在git中使用标签作为部署过程的一部分。有时,我们希望通过从远程存储库中删除这些标记来清理它们。
这很简单。一个用户在一组命令中删除了本地标签和远程标签。我们有一个结合了这两个步骤的shell脚本。
第二个(第3个,第4个,……)用户现在拥有不再反映在远程上的本地标记。
我正在寻找一个类似于git远程修剪起源的命令,清理本地跟踪分支,其中远程分支已被删除。
或者,可以使用一个简单的命令来列出远程标记,与通过git tag -l返回的本地标记进行比较。
我们在git中使用标签作为部署过程的一部分。有时,我们希望通过从远程存储库中删除这些标记来清理它们。
这很简单。一个用户在一组命令中删除了本地标签和远程标签。我们有一个结合了这两个步骤的shell脚本。
第二个(第3个,第4个,……)用户现在拥有不再反映在远程上的本地标记。
我正在寻找一个类似于git远程修剪起源的命令,清理本地跟踪分支,其中远程分支已被删除。
或者,可以使用一个简单的命令来列出远程标记,与通过git tag -l返回的本地标记进行比较。
当前回答
看起来Git的最新版本(我使用的是Git v2.20)允许人们简单地说
git fetch --prune --prune-tags
多干净!
https://git-scm.com/docs/git-fetch#_pruning
你也可以配置git在抓取时总是修剪标签:
git config fetch.pruneTags true
如果您只想在从特定的远程获取时修剪标签,您可以使用remote.<remote>。pruneTags选项。例如,当从原点读取而不是从其他遥控器读取时,总是修剪标签,
git config remote.origin.pruneTags true
其他回答
这是一个很好的方法:
Git标签-l | xargs Git标签-d && Git获取-t
来源:demisx.GitHub.io
更新@2021/05
将$REPO参数传递给自定义脚本。
sync_git_tags.sh的内容
#!/bin/sh
# cd to $REPO directory
cd $1
pwd
# sync remote tags
git tag -l | xargs git tag -d && git fetch -t
Old
ps:更新@2021/05,git获取-修剪-修剪标签来源不工作在我的MacOS。
我将该命令作为MacOS上的自定义操作添加到SourceTree。 通过Sourcetree -> Preferences设置自定义操作…->自定义动作
我使用git fetch -prune- prune-tags origin来同步标签从远程到本地。
我知道我迟到了,但现在有一个快速的答案:
git fetch --prune --prune-tags # or just git fetch -p -P
是的,它现在是一个获取的选项。
如果你不想获取,只需修剪:
git remote prune origin
Git本身支持清除本地标记
git fetch --tags --prune-tags
该命令提取最新的标记并删除所有已删除的标记
自v1.7.8以来的所有版本的Git都理解使用refspec来获取Git,而自v1.9.0以来——tags选项覆盖了——prune选项。对于一个通用的解决方案,试试这个:
$ git --version
git version 2.1.3
$ git fetch --prune origin "+refs/tags/*:refs/tags/*"
From ssh://xxx
x [deleted] (none) -> rel_test
有关“——tags”和“——prune”行为在Git v1.9.0中如何改变的进一步阅读,请参见:https://github.com/git/git/commit/e66ef7ae6f31f246dead62f574cc2acb75fd001c