219

リポジトリを作成したため、作成したタグがリポジトリにプッシュされていないようです。ローカル ディレクトリで実行git tagするとすべてのタグが表示されますが、リモート リポジトリにログオンして を実行するgit tagと、最初のいくつかしか表示されません。

問題は何ですか?

4

5 に答える 5

280

あなたはこれを行うことができます:

git push --tags
于 2010-06-07T08:48:47.490 に答える
156

デフォルトの git リモート構成では、タグを明示的にプッシュする必要があります(タグが指すコミットと一緒に自動的に取得されます)。使用する必要があります

$ git push <remote> tag <tagname>

単一のタグをプッシュする、または

$ git push <remote> --tags

すべてのタグをプッシュします (またはgit push --tags、通常はデフォルトのリモートにプッシュしますorigin)。

これは、タグのプッシュを明示的にするために非常に意図された動作です。タグをプッシュすることは、通常、意識的に選択する必要があります。


Junio C. Hamanoが書いた内容の要約(@Andre Miras のコメントにリンク)

取得すると、誰かが公開したリモート リポジトリと対話します。つまり、次のことを意味します。

  1. そこに存在するタグのセットは、パブリッシャーが人々に見てもらいたいと思っていたすべてのものであり、
  2. あなただけでなく、他の人にも同じタグが表示されます。

つまり、取得元のリポジトリ内のタグは、公開および共有されるように設計されています。誰もが同じタグを簡単に取得できれば、開発者間のコミュニケーションが容易になります。

つまりgit fetch、タグが指すリビジョンをダウンロードするときにタグをダウンロードします。つまり、関連するすべての公開済みタグをダウンロードします。

プッシュするときは、ほとんどの場合公開されていない作業リポジトリからプッシュしているため、そのリポジトリのタグは公開するように設計されていません。独自のローカル タグを使用して進行状況をマークできるため、リポジトリ内のすべてのタグをやみくもに変更を公開するためにプッシュしているリポジトリにプッシュすることは意味がありません。そのタグは定義上パブリックです。

そのため、タグを公開としてマークするには、タグを明示的にプッシュする必要があります。


または、プッシュ先のリモートを構成して、常にすべてのタグをプッシュすることもできます.git/config

[remote "publish"] # または名前が何であれ
    URL = ...
    プッシュ = +refs/heads/*:refs/heads/*
    プッシュ = +refs/tags/*:refs/tags/*

これは、すべてのヘッド (すべてのブランチ) とすべてのタグを強制的にプッシュすることを意味します (ヘッドを強制的にプッシュしたくない場合は、refspec から '+' プレフィックスを削除してください)。

于 2010-06-07T09:07:16.797 に答える
84

git 1.8.3 (2013 年 4 月 22 日)以降、ブランチをプッシュしてからタグをプッシュする 2 つのコマンドを実行する必要がなくなりました。

新しい " --follow-tags" オプションは、ブランチgit pushプッシュするときに、関連する注釈付きタグをプッシュするように指示します。

新しいコミットをプッシュするときに、次のことを試すことができます。

git push --follow-tags

ただし、すべてのローカル タグをプッシュするわけではありませgit push


これはJunio C Hamano ( )によってコミット c2aba15で導入されました。gitster

新しいオプション " --follow-tags" は " git push" に、反対側から欠落している注釈付きタグをプッシュするように指示します。

たとえば、" simple"、" current"、または " upstream" プッシュを使用している場合、通常は現在のコミットにつながる履歴をプッシュし、他にはHEAD何もプッシュしません。
このオプションを使用すると、そのコミットから到達できるすべての注釈付きタグを反対側にプッシュすることもできます。


構成では、デフォルトpush.followTagsで含めることができ--follow-tagsます (Git 2.4.1+、2015 年第 2 四半期)。「 git コミットとタグを同時にプッシュする」を参照してください

于 2013-04-23T08:44:16.007 に答える
20

私が通常行うことは次のとおりです。

[remote "publish"] # または名前が何であれ
    URL = ...
    プッシュ = :
    プッシュ = +refs/tags/*:refs/tags/*

つまり、すでにそこにあるすべてのブランチとタグをプッシュします。プッシュを強制したり、手動でプッシュしなかったブランチをプッシュしたりしません。

于 2011-12-08T10:42:04.893 に答える
5

そして、すべてのタグを強制的に取得したい場合は、次のように構成で設定できます。

git config remote.origin.tagopt --tags

ドキュメントから:

この値を --no-tags に設定すると、リモートからフェッチする際の自動タグ追跡が無効になります。--tags に設定すると、リモート ブランチ ヘッドから到達できない場合でも、すべてのタグが remote からフェッチされます。これらのフラグを直接 git-fetch(1) に渡すと、この設定をオーバーライドできます。git-fetch(1) のオプション --tags および --no-tags を参照してください。

于 2011-08-04T11:54:01.040 に答える