如果远程存储库中有标签,我通常会在 pull 时自动获取它们。当我删除创建的本地标签 ( git tag -d <tag-name>
) 并 pull 时,将重新创建已删除的标签。我可以删除远程分支/标签 ( git push <remote-branch/tag-name>:<branch/tag-name>
),但是如何检测到本地标签是通过获取远程标签创建的?
最佳答案
如果您对运行 git pull
时重新创建这些标签感到恼火,您可以使用 remote.<remote-name>.tagopt 关闭默认情况下对标签的提取。配置设置。例如如果 Remote 是 origin
,那么你可以这样做:
git config remote.origin.tagopt --no-tags
更新:为了解决您的评论,我建议这样做的原因是没有明显的方法来区分本地创建的标签和从远程获取的标签之间的区别。标签也没有 reflog
。因此,我的建议是禁止自动获取标签——然后您可以自己将它们获取到不同的命名空间中。例如,您可以这样做:
git fetch origin +refs/tags/*:refs/tags/origin/*
...并可能为此创建一个别名。然后,当您想要获取标签时,它们将被命名,例如,refs/tags/origin/tag1
而不是 refs/tags/tag1
。
如果你希望它自动发生,你可以更改你的 .git/config
以列出多个用于获取的 refspecs,例如:
[remote "origin"]
url = whoever@whereever:whatever.git
fetch = +refs/heads/*:refs/remotes/origin/*
fetch = +refs/tags/*:refs/tags/origin/*
... 这是 suggested in Pro Git .
关于Git:区分本地和远程标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5496386/