我们在git中使用标签作为部署过程的一部分.有时,我们希望通过从远程存储库中删除它们来清理这些标记.
这非常简单.一个用户在一组命令中删除本地标签和远程标签.我们有一个结合了两个步骤的小shell脚本.
第二个(第3个,第4个......)用户现在拥有不再反映在遥控器上的本地标签.
我正在寻找一个类似于git remote prune origin
清除本地跟踪已删除远程分支的分支的命令.
或者,可以使用列出远程标记的简单命令来比较通过返回的本地标记git tag -l
.
小智 977
这是一个很好的问题,我一直想知道同样的事情.
我不想写一个脚本,所以寻求一个不同的解决方案.关键是发现你可以在本地删除标签,然后使用git fetch从远程服务器"取回".如果遥控器上不存在该标签,则它将保持删除状态.
因此,您需要按顺序键入两行:
git tag -l | xargs git tag -d
git fetch --tags
Run Code Online (Sandbox Code Playgroud)
这些:
删除本地仓库中的所有标签.FWIW,xargs将每个标记输出"tag -l"放在"tag -d"的命令行中.没有这个,git不会删除任何东西,因为它不会读取stdin(愚蠢的git).
从远程仓库获取所有活动标签.
这甚至适用于Windows.
log*_*yth 236
从Git v1.7.8到v1.8.5.6,您可以使用:
git fetch <remote> --prune --tags
Run Code Online (Sandbox Code Playgroud)
由于提交e66ef7ae6f31f2,这不适用于较新版本的git(从v1.9.0开始).我真的不想删除它,因为它确实适用于某些人.
正如"Chad Juliano"所建议的那样,自v1.7.8以来的所有Git版本都可以使用以下命令:
git fetch --prune <remote> +refs/tags/*:refs/tags/*
Run Code Online (Sandbox Code Playgroud)
您可能需要用引号括起标记部分(例如在Windows上)以避免通配符扩展:
git fetch --prune <remote> "+refs/tags/*:refs/tags/*"
Run Code Online (Sandbox Code Playgroud)
new*_*ngt 150
如果您只想要遥控器上存在的那些标签,请删除所有本地标签:
$ git tag -d $(git tag)
Run Code Online (Sandbox Code Playgroud)
然后获取所有远程标签:
$ git fetch --tags
Run Code Online (Sandbox Code Playgroud)
Cha*_*ano 77
git fetch
从v1.7.8开始,所有版本的Git都使用refspec,而自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
Run Code Online (Sandbox Code Playgroud)
有关如何在Git v1.9.0中更改"--tags"与"--prune"行为的更改,请参阅:https://github.com/git/git/commit/e66ef7ae6f31f246dead62f574cc2acb75fd001c
Mik*_*est 66
好问题.:)我没有完整的答案......
也就是说,您可以通过获取远程标签列表git ls-remote
.要列出引用的存储库中的标记origin
,您将运行:
git ls-remote --tags origin
Run Code Online (Sandbox Code Playgroud)
返回哈希和友好标签名称列表,如:
94bf6de8315d9a7b22385e86e1f5add9183bcb3c refs/tags/v0.1.3
cc047da6604bdd9a0e5ecbba3375ba6f09eed09d refs/tags/v0.1.4
...
2f2e45bedf67dedb8d1dc0d02612345ee5c893f2 refs/tags/v0.5.4
Run Code Online (Sandbox Code Playgroud)
你当然可以组合一个bash脚本来比较这个列表生成的标签和你本地的标签.看看git show-ref --tags
,它以相同的形式生成标签名称git ls-remote
).
顺便说一句,git show-ref
有一个选项与你想要的相反.以下命令将列出远程分支上本地没有的所有标记:
git ls-remote --tags origin | git show-ref --tags --exclude-existing
Run Code Online (Sandbox Code Playgroud)
Nic*_*rey 59
看起来像Git的近期版本(我在git v2.20上)只是简单地说
git fetch --prune --prune-tags
Run Code Online (Sandbox Code Playgroud)
更干净!
https://git-scm.com/docs/git-fetch#_pruning
jok*_*ker 11
我知道我参加聚会迟到了,但现在有一个快速的答案:
git fetch --prune --prune-tags # or just git fetch -p -P
Run Code Online (Sandbox Code Playgroud)
是的,现在可以选择获取。
如果您不想获取,只需修剪:
git remote prune origin
Run Code Online (Sandbox Code Playgroud)
在新的 git 版本中(如 v2.26.2)
-P, --prune-tags 如果启用了 --prune ,则在获取之前删除远程上不再存在的任何本地标签。应该更谨慎地使用此选项,与 --prune 不同,它会删除已创建的任何本地引用(本地标记)。此选项是提供显式标签 refspec 和 --prune 的简写,请参阅其文档中的讨论。
所以你需要运行:
git fetch origin --prune --prune-tags
Run Code Online (Sandbox Code Playgroud)
小智 7
Git本机支持清除本地标签:
git fetch --tags --prune
Run Code Online (Sandbox Code Playgroud)
该命令提取最新的标签,并删除所有已删除的标签。
与 @Richard W 的答案相同,但适用于 Windows (PowerShell)
git tag | ForEach-Object -Process { git tag -d $_ }
git fetch -t
Run Code Online (Sandbox Code Playgroud)
Show the difference between local and remote tags:
diff <(git tag | sort) <( git ls-remote --tags origin | cut -f2 | grep -v '\^' | sed 's#refs/tags/##' | sort)
Run Code Online (Sandbox Code Playgroud)
git tag
gives the list of local tagsgit ls-remote --tags
gives the list of full paths to remote tagscut -f2 | grep -v '\^' | sed 's#refs/tags/##'
parses out just the tag name from list of remote tag paths以“ <”开头的行是您的本地标签,不再位于远程仓库中。如果数量很少,则可以一个接一个地手动删除它们;如果数量很多,则可以进行更多的grep-ing和管道操作以使其自动化。
$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
Run Code Online (Sandbox Code Playgroud)
ps:更新于@2021/05,
git fetch --prune --prune-tags origin
在我的 MacOS 上不起作用。
我将该命令添加SourceTree
为 MacOS 上的自定义操作。
设置Custom Actions
方式Sourcetree
-> Preferences...
->Custom Actions
我用来git fetch --prune --prune-tags origin
将标签从远程同步到本地。
归档时间: |
|
查看次数: |
151876 次 |
最近记录: |