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


188

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

問題は何でしょうか?


3
git push --follow-tags役立つようになりました。以下の私の回答を
VonC 2013


1
重複に同意する:これは古いですが、他の質問の方が適切です。
Ciro Santilli郝海东冠状病六四事件法轮功

回答:


244

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

git push --tags

27
これは、HEAD参照がプッシュされないことを意味します。つまり、タグをプッシュするだけです。
Dan Rosenstark、2012年

47
git push --tags同僚がすべてのタグをプッシュするように訓練されている場合、悪いタグを取り除くのは非常に難しいため、他の人を使用したり、使用するように訓練したりしないことをお勧めします。新しいタグをプッシュしたい。そのため、私は誰かにgit push origin <tag_name>今すぐ使うようにアドバイスするだけです。」-stackoverflow.com/a/5195913/4130619
活動を減らす

もう1つの答えは、stackoverflow.com / a / 16164809/11635を受け入れるべきだと思います。そうでない場合でも、必ず読む必要があります-これは長所と短所を提供し、最終的には今日のより実用的で正しい答えになります
Ruben Bartelink

138

デフォルトの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

[リモート「パブリッシュ」]#または名前が付けられているもの
    url = ...
    プッシュ= + refs / heads / *:refs / heads / *
    プッシュ= + refs / tags / *:refs / tags / *

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


これは常にすべての頭を「強制的に押し」ませんか?
StefanNäwe10年

@ステファン:そうです。更新しました。
JakubNarębski10年

19
「これは、プッシュタグを明示的にするための非常に意図された動作です。タグのプッシュは、通常、意識して選択する必要があります。」根拠がわかりません。Gitがタグを自動的にプッシュするのが悪い理由について詳しく説明できますか?
Ryan Lundy

13
@Kyralessa、この投稿git.661346.n2.nabble.com/…でJumio C Hamano(Gitの現在のメンテナー)が、タグを自動的にプッシュするのがなぜ悪いのかを説明しています。
Andre Miras 2013

@AndreMirasこの素晴らしいリンクをありがとう。Junioの投稿をこの回答に統合できるといいですね。
Homer6 2013

67

以来、ことを注意gitの1.8.3(4月22D、2013) 、あなたはもはやプッシュ枝に2つのコマンドを実行するために、その後、タグをプッシュする必要があります。

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

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

git push --follow-tags

ただし、すべてのローカルタグがプッシュされるわけではなく、でプッシュされるコミットによって参照される注釈付きのタグのみがプッシュされますgit push


これは、Jumio C Hamano(gitsterによってコミットc2aba15で導入されました:

新しいオプション " --follow-tags"は " git push"に、反対側から欠落していて、他の方法でプッシュされた履歴によって到達できる注釈付きタグをプッシュするように指示します。

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


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


3
これは、すべての注釈付きタグをプッシュするだけです。ほとんどの人/プロジェクトは軽量のタグを使用しています。そのため、ほとんどの場合、git push --follow-tagsそれを超えることはありませんgit push
Jarl

3
@Jarlはい、私は私の回答で「注釈付き」に言及しました。しかし、私は本当に注釈付きタグのみを使用しており、純粋に内部使用のために軽量タグを予約しています(つまり、とにかくプッシュされることを意図したものでは決してありません)。
VonC 2014年

@VonC:ここでメモしたように、これをデフォルトにする設定オプションもあります:stackoverflow.com/a/3745250/946850
krlmlr

19

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

[リモート「パブリッシュ」]#または名前が付けられているもの
    url = ...
    プッシュ=:
    プッシュ= + refs / tags / *:refs / tags / *

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


それをユーザーのグローバルgit構成に含めることもできますか?はいの場合、どのように?ありがとう!:)
gucki 2013

タグを強制しているようですが、ブランチは強制していません。
Adrian Ratnapala 2013

ええ、そうです、いいえ、私はそれを書きました、それは新しいタグをプッシュします、それはそれらを強制的にプッシュしません、そしてあなたがまだあなた自身をプッシュしていないブランチをプッシュしません。
マット

ジャクブの提案を試してみましたが、地元でしか欲しがっていなかったブランチを押してしまいました。この提案は、マット、完璧に動作します。タグを同期しますが、リモートトラッキングブランチでない限り、ブランチは同期しません(つまり、新しいブランチをリモートにプッシュしませんが、すでにリモートにある場合は更新します)。注:同じ名前のタグとブランチがある場合、「複数に一致する」エラーが発生します。lostechies.com/jasonmeridth/2010/02/27/refspec-matches-more-than-one/を参照してください
josephdpurcell 2013年

5

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

git config remote.origin.tagopt --tags

ドキュメントから:

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


1
質問はより「プッシュ」指向でしたが、リモートにプッシュするときにもあなたの答えは当てはまりますか?
a1an
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.