web-dev-qa-db-ja.com

gitタグもプッシュされますか?

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

何が問題なのでしょうか?.

173
vfclists

これを行うことができます:

git Push --tags
225
eevar

デフォルトのgitリモート設定では、タグをプッシュする必要がありますexplicitly(それらはコミットとともに自動的にフェッチされます)彼らが指す)。使用する必要があります

$ git Push <remote> tag <tagname>

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

$ git Push <remote> --tags

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

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


Junio C. Hamanoの概要 wrote (@Andre Mirasによるコメントにリンク)

フェッチするとき、あなたは誰かが公開したリモートリポジトリと対話しています。

  1. そこに存在するタグのセットは、サイト運営者が人々に見せたいと思ったものすべてです。
  2. あなただけでなく、他の人にも同じタグが表示されます。

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

git fetchが自動的にタグを「追跡」するのはそのためです。つまり、参照するリビジョンをダウンロードするときにタグをダウンロードします。つまり、関連するpublishedタグをすべてダウンロードします。

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

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


または、プッシュするリモートを設定して、常にすべてのタグをプッシュすることができます。 .git/configにそのようなものを入れてください:

 [remote "publish"]#または名前が付けられたもの
 url = ... 
 Push = + refs/heads/*:refs/heads /*
 Push = + refs/tags/*:refs/tags /*

つまり、forceすべてのヘッド(すべてのブランチ)とすべてのタグをプッシュします(ヘッドを強制的にプッシュしたくない場合は、refspecから「+」プレフィックスを削除します)。

134
Jakub Narębski

git 1.8.3(2013年4月22日) であるため、ブランチをプッシュしてタグをプッシュするために2つのコマンドを実行する必要がなくなったことに注意してください。

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

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

git Push --follow-tags

ただし、ローカルタグはプッシュされませんall。ただし、git Pushでプッシュされるコミットによって参照されるannotatedタグのみです。


これは commit c2aba15Chamano Junio(gitster によって導入されました:

新しいオプション「--follow-tags」は、「git Push」に、反対側から欠落している注釈付きタグをプッシュするよう指示し、それ以外の場合はプッシュアウトされる履歴によって到達できます。

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


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

59
VonC

私が通常していることは:

 [リモート「公開」]#または名前が付けられたもの
 url = ... 
 Push =:
 Push = + refs/tags/*:refs /tags/*

つまり、既に存在するすべてのブランチとタグがプッシュされます。プッシュを強制しません。また、手動でプッシュしなかったブランチをプッシュしません。

19
mat

また、すべてのタグを強制的に取得する場合は、次の方法で構成で設定できます。

git config remote.Origin.tagopt --tags

ドキュメントから:

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

4
boryn