【问题标题】:How do you push a tag to a remote repository using Git?如何使用 Git 将标签推送到远程存储库?
【发布时间】:2011-07-08 22:14:49
【问题描述】:

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

git tag mytag master

当我在笔记本电脑上运行git tag 时,会显示标签mytag。然后我想把它推送到远程存储库,所以我的所有客户端都有这个标签,所以我运行 git push 但我收到了消息:

一切都是最新的

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

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

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

【问题讨论】:

    标签: git git-push git-tag


    【解决方案1】:

    要推送一个单个标签:

    git push origin <tag_name>
    

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

    # not recommended
    git push --tags
    

    【讨论】:

    • 我建议不要使用或培训其他人使用git push --tags,因为当您的同事接受过推送所有标签的培训时,很难摆脱不良标签,因为人们会继续推送每次他们想要推送新标签时,他们在本地都有旧的坏标签。因此,我只会建议每个人现在使用git push origin &lt;tag_name&gt;
    • 推送 moved 标签:git push origin &lt;tag_name&gt; --force
    • 如果你的tag和远程分支一样,git push失败,error: src refspec &lt;tag_name&gt; matches more than one.,你可以推送为git push origin tag &lt;tag_name&gt;
    • 请注意,git push --tags origin &lt;tag_name&gt; 不是你想要的 - 尽管命名了一个特定的标签,它会推送它们,甚至是轻量级的。叹息。
    • 如果要推送所有标签,可以先git push --dry-run --tags origin 看看会推送什么。
    【解决方案2】:

    git push --follow-tags

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

    git push --follow-tags
    

    它同时推送提交和仅推送两者的标签:

    • 注释
    • 可从推送的提交中访问(祖先)

    这很正常,因为:

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

    Git 2.4 has added push.followTags 选项默认打开该标志,您可以设置:

    git config --global push.followTags true
    

    或将followTags = true 添加到~/.gitconfig 文件的[push] 部分。

    【讨论】:

    • 我并不清楚这是“注释”和“可从推送的提交中访问”之间的与关系。我希望它会推送所有可访问的标签,无论是否有注释。也许编辑以确保它不是 OR?
    • 这在 git 2.5.0 中对我不起作用,但 git push origin --tags 可以。
    • @nnyby 请提供一个最小示例,其中包含从 repo 创建到失败的所有必要命令,并将其发布在 gist 上,以便我可以尝试重现 ;-)
    • 感谢 push.followTags 提示。我不敢相信这不是开箱即用的默认设置。没有它,甚至不用费心标记,你会忘记并失去同步标记。
    • 添加了关于通过配置文件设置跟随标签的行。
    【解决方案3】:

    要推送具体,一个标签做以下 git push origin tag_name

    【讨论】:

      【解决方案4】:

      要扩展Trevor's answer,您可以推送单个标签或所有标签 标记一次。

      推送单个标签

      git push <remote> <tag>
      

      这是解释这一点的relevant documentation 的摘要(一些 为简洁起见省略了命令选项):

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

      &lt;refspec&gt;参数的格式是……源引用&lt;src&gt;, 后跟冒号:,后跟目标引用&lt;dst&gt;...

      &lt;dst&gt; 告诉远程端的哪个 ref 用这个更新 push…如果:&lt;dst&gt;被省略,与&lt;src&gt;相同的引用将是 更新了……

      标签&lt;tag&gt;refs/tags/&lt;tag&gt;:refs/tags/&lt;tag&gt;含义相同。

      一次性推送所有标签

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

      这里是relevant documentation的总结(一些命令选项 为简洁省略):

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

      除了显式引用规范之外,refs/tags 下的所有引用都被推送 列在命令行中。

      【讨论】:

      • 该示例省略了关键字tag。例如git push origin tag funny-tag-1.
      • @JamesThomasMoon1979 你不需要它。您将单个标签推送到原点,如下所示:git push origin my-tag(我刚刚尝试过!)
      • 我使用的是 1.9.1 版本,你呢@AndresF。 ?
      • @JamesThomasMoon1979 版本2.10.2。也许就是这样?
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        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

        【讨论】:

          【解决方案7】:

          你可以像git push --tags这样推送标签

          【讨论】:

            【解决方案8】:

            我正在使用git push &lt;remote-name&gt; tag &lt;tag-name&gt; 来确保我正在推送标签。我像这样使用它:git push origin tag v1.0.1。此模式基于文档 (man git-push):

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

            【讨论】:

              【解决方案9】:

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

              运行此命令将mytag 推送到您的 git 源(例如:GitHub 或 GitLab)

              git push origin refs/tags/mytag
              

              最好使用上面显示的完整“refspec”(字面意思是refs/tags/mytag),以防mytag 实际上是v1.0.0 并且不明确(例如:因为有一个分支也名为v1.0.0)。

              【讨论】:

                【解决方案10】:

                在当前分支中添加标签

                git tag tag_name
                

                检查是否已创建

                git tag
                

                推入你的远程来源

                git push origin tag_name
                

                【讨论】:

                  【解决方案11】:

                  我做了这样的事情:

                  git push --tags origin <branch-name> <tag-name>
                  
                  e.g. : git push --tags origin master v2.0
                  

                  【讨论】:

                    【解决方案12】:

                    也可以使用可用的工具来创建标签。添加了一个 Git 扩展和源代码树示例。

                    此外,如果您希望将标签移动到远程分支,请选择“将标签推送到原点”并推送您的标签。这将有助于其他开发人员在更新最新的存储库时使用或参考特定位置。

                    在 GitExtension/sourcetree 中打开存储库。

                    • 选择要添加标签的提交。右击提交,可以看到创建标签的选项。

                    GIT 扩展:

                    源树:

                    • 作为另一个选项,您可以从顶部菜单中选择创建标签。

                    GIT 扩展:

                    源树:

                    • 将打开此弹出窗口,根据您的要求添加标签名称并选择“将标签推送到来源”。但首选。

                    GIT 扩展:

                    源树:

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-11-11
                      • 1970-01-01
                      • 2018-06-24
                      • 2010-10-25
                      • 1970-01-01
                      相关资源
                      最近更新 更多