自从我创建存储库以来,似乎一直在创建的标签未推送到存储库。当我git tag
在本地目录上执行操作时,所有标记都存在,但是当我登录到远程存储库并执行时git tag
,只会显示前几个。
这可能是什么问题?
自从我创建存储库以来,似乎一直在创建的标签未推送到存储库。当我git tag
在本地目录上执行操作时,所有标记都存在,但是当我登录到远程存储库并执行时git tag
,只会显示前几个。
这可能是什么问题?
Answers:
您可以这样做:
git push --tags
git push --tags
因为当您的同事受过推销所有标签的训练时,要摆脱掉不良标签非常困难,因为人们每次每次都会在本地推销他们所拥有的旧的不良标签想要推一个新标签。因此,我只会建议每个人git push origin <tag_name>
现在使用。” -从stackoverflow.com/a/5195913/4130619
在默认的git remote配置中,您必须显式推送标签(标签会自动与指向的提交一起获取)。您需要使用
$ git push <remote> tag <tagname>
推一个标签,或者
$ git push <remote> --tags
推送所有标签(或git push --tags
通常推送到默认远程origin
)。
这是非常有意的行为,用于使推送标签明确。推送标签通常应该是有意识的选择。
总结Junio C. Hamano 撰写的内容(在@Andre Miras的评论中链接)
提取时,您正在与有人发布的远程存储库进行交互,这意味着:
- 存在的一组标记,所有发布者都希望人们看到,
- 不仅您,其他人也会看到相同的标签。
换句话说,您从中获取的存储库中的标签被设计为公开和共享的。如果每个人都容易获取这些相同的标签,它将有助于开发人员之间的通信。
这就是为什么git fetch
自动“跟随”标签的原因,即在下载它们指向的修订版本时会下载标签-换句话说,会下载所有相关的已发布标签。
推送时,您是从工作存储库中推送,该存储库在大多数情况下不是公开的,并且该存储库中的标签并非设计为公开的。您可以使用自己的本地标记来标记您的进度,因此盲目将存储库中的所有标记推送到要发布更改的存储库中是没有意义的,这些标记的定义是公开的。
这就是为什么您需要显式推送标记,以将标记标记为公共。
另外,您可以配置要推送的遥控器以始终推送所有标签,例如,在您的服务器中放置类似的标签.git/config
:
[远程“发布”]#或其他名称 网址= ... 推送= + refs / heads / *:refs / heads / * 推送= + refs / tags / *:refs / tags / *
这意味着强行推入所有头部(所有分支)和所有标签(如果您不想强行推入头部,请从refspec中删除“ +”前缀)。
请注意,自git 1.8.3(2013年4月22日)以来,您不再需要执行2条命令来推送分支,然后再推送标签:
新的“
--follow-tags
选项告诉”git push
“ 当推出分支时推送相关的带注释的标签。
现在,当推送新提交时,您可以尝试:
git push --follow-tags
但是,这不会推送所有本地标签,而只会推送由提交引用的带注释的标签,并由推送git push
。
这已被引入提交c2aba15通过JUNIOÇ滨野(gitster
):
新的选项“
--follow-tags
”告诉“git push
”推送从另一面丢失的注释标签,而这些注释可以通过被压出的历史记录来访问。例如,如果您使用“
simple
”,“current
”或“upstream
”推送,则通常会按当前推送推送导致提交的历史记录HEAD
。
使用此选项,您还将把可以从该提交到达的所有带注释的标签推到另一侧。
该配置默认push.followTags
允许包含--follow-tags
(Git 2.4.1+,Q2 2015)。请参阅“ 同时推送git commits和标签 ”
git push --follow-tags
,推动git push
我通常要做的是:
[远程“发布”]#或其他名称 网址= ... 推=: 推送= + refs / tags / *:refs / tags / *
这意味着它将推送已经存在的每个分支以及标签。它不会强制推送,也不会推送您未手动推送的分支。
git push --follow-tags
现在可以使用,请参阅下面的答案