git标签也被推送了吗?
由于我创建了我的存储库,因此似乎我创建的标签不会推送到存储库。 当我在本地目录上执行git标记时,所有标记都会出现,但是当我登录到远程存储库并执行git标记时,只显示前几个标记。
问题是什么?
你可以这样做:
git push --tags
在默认的git远程配置中,你必须显式地推送标签(当它们被自动提取时,它们指向的提交)。 你需要使用
$ git push <remote> tag <tagname>
推一个标签,或者
$ git push <remote> --tags
推送所有标签(或git push --tags
标签推到默认远程,通常是origin
)。
这是非常有意的行为,使得推送标签变得清晰。 推送标签通常应该是有意识的选择。
总结Junio C. Hamano写了些什么(在@Andre Miras的评论中链接)
提取时,您正在与某人发布的远程存储库进行交互,这意味着:
换句话说,您从中获取的存储库中的标签被设计为公共和共享。 如果每个人都可以轻松获取这些相同的标签,它将促进开发人员之间的沟通。
这就是为什么git fetch
自动git fetch
“跟随”标签的原因,也就是说,它在下载标签时会下载标签 - 换句话说就是下载所有相关的已发布标签。
推送时,您正在从您的工作存储库中推送,大多数时间不是公开的,并且存储库中的标签不旨在公开。 您可以使用自己的本地标记来标记进度,因此盲目地将存储库中的所有标记推送到您推送的存储库以发布您的更改并没有任何意义,这些更改的标记根据定义是公开的。
这就是为什么您需要明确推送标签,以将标签标记为公开。
或者,您可以配置您推送的远程设备以始终推送所有标签,例如,在.git/config
放置类似的东西:
[remote "publish"] # or whatever it is named url = ... push = +refs/heads/*:refs/heads/* push = +refs/tags/*:refs/tags/*
这意味着强制推动所有头部(所有分支)和所有标签(如果您不想强制推动头部,请从refspec中删除'+'前缀)。
请注意,自git 1.8.3(2013年4月22日)以来,您不必再执行2个命令来推送分支,然后推送标签:
新的“ --follow-tags
”选项告诉“ git push
” 在推出分支时推送相关的注释标签 。
现在您可以尝试在推送新提交时:
git push --follow-tags
这不会推送所有的本地标签,只有通过git push
提交引用了注释。
Junio C gitster
( gitster
)在c2aba15中提出了这个问题:
新选项“ --follow-tags
”告诉“ git push
”推送从另一侧丢失的注释标签,并且可以通过推出的历史记录到达。
例如,如果您正在使用“ simple
”,“ current
”或“ upstream
”推送,您通常会推送导致您当前HEAD
提交的历史记录,而没有其他内容。
使用此选项,您还可以将可以从该提交到达的所有带注释的标签推送到另一侧。
配置push.followTag
允许默认包含--follow-tags
(Git 2.4.1+,Q2 2015)。
请参阅“同时推送git提交和标记”