因为我创建了我的存储库,所以我看来是标签
创建不会被推送到存储库。当我做git tag
时
本地目录中存在所有标记,但是当我登录时
远程存储库并执行git tag
,只显示前几个。
问题是什么?。
答案 0 :(得分:219)
你可以这样做:
git push --tags
答案 1 :(得分:132)
在默认的git远程配置中,你必须明确地推送标签(当它们自动提取与它们指向的提交一起)。你需要使用
$ git push <remote> tag <tagname>
推送单个标签,或
$ git push <remote> --tags
推送所有代码(或git push --tags
推送到默认远程,通常为origin
)。
这是非常有用的行为,可以使推送标签显式化。推送标签通常应该是有意识的选择。
总结Junio C. Hamano wrote(@Andre Miras的评论中链接)
在获取时,您正在与某人已发布的远程存储库进行交互,这意味着:
- 存在的标记集是所有发布商都希望人们看到的,
- 不仅你,而且其他人也会看到相同的标签。
醇>换句话说,您从中获取的存储库中的标记旨在公开和共享。如果每个人都很容易获取这些相同的标签,它将促进开发人员之间的沟通。
这就是git fetch
自动“跟随”标记的原因,即下载标签时下载标签 - 换句话说,下载所有相关发布的标签。
推送时,您正在从您的工作存储库中推送,该存储库大部分时间都不公开,并且该存储库中的标记不是公开的。您可以使用自己的本地标记来标记进度,因此盲目地将存储库中的所有标记推送到您要发布更改的存储库是没有意义的,这些更改的标记是公开的。
这就是为什么你需要明确地推送标签,将标签标记为公共。
或者,您可以将您推送的遥控器配置为始终按下所有标签,例如在.git/config
:
[remote "publish"] # or whatever it is named url = ... push = +refs/heads/*:refs/heads/* push = +refs/tags/*:refs/tags/*
这意味着强制推送所有头部(所有分支)和所有标签(如果您不想强制推动头部,请从refspec中删除'+'前缀)。
答案 2 :(得分:57)
请注意,从git 1.8.3 (April 22d, 2013)开始,您不再需要执行2个命令来推送分支,然后推送标记:
新的“
--follow-tags
”选项告诉“git push
”在推出分支时推送相关的带注释标签。
现在,您可以在推送新提交时尝试:
git push --follow-tags
这不会推送所有本地标记,只有带注释的通过git push
推送的提交引用。
commit c2aba15 Junio C Hamano (gitster
)已在Push git commits & tags simultaneously中引入了此内容:
新选项“
--follow-tags
”告诉“git push
”推送另一方丢失的注释标记,并且可以通过其他方式推送出来的历史记录。例如,如果您使用的是“
simple
”,“current
”或“upstream
”推送,那么您通常会推送当前提交的历史记录HEAD
而没有别的 使用此选项,您还可以将所有可以从该提交到达的带注释标签推送到另一端。
配置push.followTags
允许默认包含--follow-tags
(Git 2.4.1 +,2015年第2季度)。
请参阅“{{3}}”
答案 3 :(得分:18)
我通常做的是:
[remote "publish"] # or whatever it is named url = ... push = : push = +refs/tags/*:refs/tags/*
意味着它会推送已经存在的每个分支以及标记。它不会强制推动,也不会推动你没有手动推动的分支。
答案 4 :(得分:3)
如果你想强制获取所有标签,你可以通过以下方式在配置中设置它:
git config remote.origin.tagopt --tags
来自文档:
将此值设置为--no-tags会禁用从远程获取时的自动标记。将其设置为--tags将获取每个标记 来自远程,即使它们无法从远程分支到达 头。将这些标志直接传递给git-fetch(1)可以覆盖它 设置。请参阅git-fetch(1)的选项--tags和--no-tags。