如何使用 Git 将标签推送到远程存储库?

我已经将一个远程 Git 存储库克隆到了我的笔记本电脑,然后我想添加一个标签,以便我运行

git tag mytag master

当我在笔记本电脑上运行git tag ,将显示mytag标签。然后,我想将其推送到远程存储库,以便在所有客户端上都具有此标记,因此我运行git push但收到消息:

一切都是最新的

如果我转到桌面并运行git pull ,然后运行git tag ,则不会显示任何标签。

我还尝试对项目中的文件进行较小的更改,然后将其推送到服务器。之后,我可以将更改从服务器拉到台式计算机,但是在台式计算机上运行git tag时仍然没有标签。

如何将标签推送到远程存储库,以便所有客户端计算机都可以看到它?

答案

推送单个标签:

git push origin <tag_name>

并且以下命令应推送所有标签( 不推荐 ):

git push --tags

git push --follow-tags

这是 Git 1.8.3 中引入的明智选择:

git push --follow-tags

它既推送提交,又推送两个标签:

  • 带注释
  • 从推送提交中可到达的(祖先)

这是理智的,因为:

出于这些原因,应避免使用--tags

Git 2.4 添加push.followTags选项以默认打开该标志,您可以使用以下命令进行设置:

git config --global push.followTags true

为了具体推送,一个标签跟随git push origin tag_name

要扩展Trevor 的答案 ,您可以一次推送单个标签或所有标签。

推送单个标签

git push <remote> <tag>

这是解释此问题的相关文档的摘要(为简洁起见,省略了一些命令选项):

git push [[<repository> [<refspec>…]]

<refspec>...

<refspec>参数的格式为… 源 ref <src> ,后跟冒号: ,然后是目标 ref <dst>

<dst>告知通过此推送更新远程方的哪个引用… 如果省略:<dst> ,则与<src>相同的引用将被更新…

标签<tag>含义与refs/tags/<tag>:refs/tags/<tag>

一次推送所有标签

git push --tags <remote>
# Or
git push <remote> --tags

以下是相关文档的摘要(为简便起见,省略了一些命令选项):

git push [--all | --mirror | --tags] [<repository> [<refspec>…]]

--tags

除了在命令行上明确列出的 refspecs 之外,还会推送refs/tags下的所有 refs。

标记不会通过 git push 命令发送到远程存储库。我们需要使用以下命令将这些标记显式发送到远程服务器:

git push origin <tagname>

我们可以使用以下命令一次推送所有标签:

git push origin --tags

以下是一些有关 git 标签完整详细信息的资源:

http://www.cubearticle.com/articles/more/git/git-tag

http://wptheming.com/2011/04/add-remove-github-tags

您可以像这样git push --tags标签git push --tags

您可以通过简单的git push --tags命令来推送所有本地标签。

$ git tag                         # see tag lists
$ git push origin <tag-name>      # push a single tag
$ git push --tags                 # push all local tags

我正在使用git push <remote-name> tag <tag-name>以确保我正在推送标记。我使用它像: git push origin tag v1.0.1 。此模式基于文档( man git-push ):

OPTIONS
   ...
   <refspec>...
       ...
       tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.