如何配置git以在每次拉取时自动获取标签?

16

这可能是一个非常愚蠢的想法,但如何配置 git 仓库,以便任何自动拉取都会从其他仓库获取标签?

根据文档,看起来您可以在每个远程仓库上进行此操作:

remote.<name>.tagopt
如果将此值设置为 --no-tags,则禁用从远程 <name> 拉取时自动跟随标签。如果将其设置为 --tags,则会从远程 <name> 拉取每个标签,即使它们不可从远程分支头到达。将这些标志直接传递给 git-fetch(1) 可以覆盖此设置。请参阅 git-fetch(1) 的选项 --tags 和 --no-tags。

有没有办法使 --tags 成为每次拉取时的默认标志?

3个回答

8
获取标签(git fetch)与获取提交有不同的效果,如“Does “git fetch --tags” include “git fetch”?"中所解释的那样。
后者将更新分支头,并实际获取从这些更新的分支可达的标签。 前者将获取所有标签,但不会更新分支头。
因此,如果您要获取的分支可以到达标签,则默认情况下无需包含--tags
考虑到一些存储库(包括Linux),其历史记录很长,总是想要获取所有标签可能会导致标签列表混乱(一个被数百个不需要的标签污染的标签列表)。
请注意,从git 1.9/2.0(2014年第一季度)开始,git fetch --tags将获取所有内容(如git fetch),以及标签。请参见“Does “git fetch --tags” include “git fetch”?”。

请求从远程获取所有标签,除了正在获取的其他内容

因此,您可以尝试remote.<name>.tagOpt配置选项
git config (--global) remote.<name>.tagOpt --tags

将其设置为--tags将从远程<name>获取每个标签,即使它们从远程分支头不可达。

获取标签不是默认设置,因此显然Linus认为这是一个坏主意。然而,我的团队习惯于使用BitKeeper,并经常忘记在应该(即发布标签)时获取标签。如果无用的标签数量变得荒谬,您可以删除标签。 - Ross Rogers
使用 git fetch --tags 命令来获取 @LimitedAtonement。"git fetch --tags 会获取所有内容(就像 git fetch 一样),包括标签。" 这并不意味着 "获取标签不再有所不同"。 - VonC
@VonC 感谢您的回复。我的错误;我没有完全引用原始问题:“配置git以自动获取标签...” - lmat - Reinstate Monica
@LimitedAtonement 对的。我已经编辑了答案,包括可以使提取标签自动化的配置设置。 - VonC
@VonC 感谢您的更新。OP在他的问题中提到这并不足够,但我认为目前这仍然是最好的选择。 - lmat - Reinstate Monica
显示剩余4条评论

7

只需将此代码添加到您的远程配置文件中:

fetch = +refs/tags/*:refs/tags/*

3
有没有一种全局的选项来做到这一点?不仅仅是针对特定的代码库。 - zx1986
这是在我现在拥有的那一行之外还是替换它?我目前有 fetch = +refs/heads/*:refs/remotes/origin/* - isapir
1
@isapir 这是额外的。一个获取分支,另一个获取标签。 - FelipeC
这样做会导致git push命令也将推送本地标签吗? - Stefan

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接