Gitコミットとタグを同時にプッシュする


387

それgit push --tagsがプレーン・オールドとは別の操作である理由を知っていgit pushます。タグを誤ってプッシュしたくないので、タグをプッシュすることは意識的な選択である必要があります。それはいいです。しかし、両方を一緒にプッシュする方法はありますか?(を除いてgit push && git push --tags。)


4
あなたの問題はgit push && git push --tags何ですか?
fuz

21
特に何もありません。接続を2回確立する必要があるため、速度が遅くなるだけです。
ロバートソンウィルロバートソン

16
以下の私の更新された回答を参照してください:--follow-tagsgit 1.8.3以降の新しいオプションがあります
VonC 2013

24
これらを個別に行わないもう1つの理由は、同じ種類の自動化を導入している場合に、同じコミットに対して2つのCIビルドがトリガーされないようにするためです。
Alex R

また--tags、軽量タグと注釈付きタグのソースを
karlsebal

回答:


555

2015年5月の更新

以下のようにgit 2.4.1、あなたが行うことができます

git config --global push.followTags true

trueに設定した場合、デフォルトで--follow-tagsオプションを有効にします。
--no-follow-tagsを指定することで、プッシュ時にこの設定をオーバーライドできます。

ウェス・ハードに答えるマット・ロジャースのこのスレッドで述べたように:

--follow-tags 注釈付きタグのみをプッシュします

git tag -a -m "I'm an annotation" <tagname>

それはプッシュされます(git tag <tagname>私がここで述べたように、プッシュされない軽量タグとは対照的に)

2013年4月の更新

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

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

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

git push --follow-tags

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

Git 2.4.1+(2015年第2四半期)では、このオプションが導入されますpush.followTagsgit push「」にタグをブランチ内に含める方法」を参照してください。

元の回答、2010年9月

核オプションはgit push --mirror、すべての参照を押し下げるでしょうrefs/

現在のブランチコミットでタグを1つだけプッシュすることもできます。

git push origin : v1.0.0 

この--tagsオプションを次のようなrefspecと組み合わせることができます。

git push origin --tags :

(これ--tags、コマンドラインに明示的にリストされているrefspecに加えてrefs/tags、以下のすべての参照がプッシュされるからです


また、このエントリ「ブランチとタグを1つの「git push」呼び出しでプッシュする

便利なヒントがZoltánFüzesiによってGitメーリングリストに投稿されました。

私は.git/configこれを解決するために使用します:

[remote "origin"]
    url = ...
    fetch = +refs/heads/*:refs/remotes/origin/*
    push = +refs/heads/*
    push = +refs/tags/*

これらの行を追加git push originすると、すべてのブランチとタグがアップロードされます。それらの一部のみをアップロードする場合は、それらを列挙できます。

まだ自分で試したことはありませんが、ブランチとタグを同時にプッシュする他の方法がgit pushに追加されるまでは便利なようです。
一方、入力は問題ありません。

$ git push && git push --tags

Aseem Kishoreによるコメントに注意してください

push = +refs/heads/*すべてのブランチ強制的にプッシュします

これはちょうど今私を噛んだので、参考までに。


RenéScheibeこの興味深いコメントを追加しました。

--follow-tagsパラメータは下のタグのみと誤解される.git/refs/tagsと考えられています。
場合git gcに実行され、タグがから移動している.git/refs/tags.git/packed-refs。その後git push --follow-tags ...はもう期待どおりに動作しません。


3
リンク先の投稿への1つのコメントは、push = +refs/heads/*すべてのブランチを強制的にプッシュすることを正しく指摘しています。これはちょうど今私を噛んだので、参考までに。
Aseem Kishore 2012年

2
Re:--follow-tagsgit 1.8.3で追加されたフラグですが、gitインストールをデフォルトに設定できますか
Trevor Burnham

1
無@TrevorBurnham、の値のみpush.defaultgit-scm.com/docs/git-configを)押しのデフォルトのアクションを定義することができます(nothingmatchingupstreamsimpleのようにstackoverflow.com/a/10002469/6309)。--follow-tag明示的に追加する必要があります。
VonC 2013年

1
@VonC強制的にタグをプッシュしたい場合はどうなりますか?git push --follow-tags -fうまくいきませんでした。
mauryat

1
--follow-tagsパラメータは下のタグのみと誤解される.git/refs/tagsと考えられています。場合git gcに実行され、タグがから移動している.git/refs/tags.git/packed-refs。その後git push --follow-tags ...はもう期待どおりに動作しません。
ルネScheibe

4

多分これは誰かを助ける:

 1. git commit -a -m "msg"  
 2. git tag 0.1.0                // creates a new tag locally     
 3. git push origin tag 0.1.0    // pushes the tag & the code in the remote repo          

私はgit-2.21.0.windows.1であなたの解決策を試しました、そして、3がタグを押すだけであることがわかりました
ダスティン日

私の側では問題なく動いています。3つのコマンドすべてを正しい順序で試行していて、リモートリポジトリが設定されていますか(git remote -v)?
Rajesh Gupta、

手順1で "git commit -m" msg "を使用しましたが、-aパラメータがありませんでした。これが理由である可能性があります。フォローアップをありがとう!
Dustin Sun


0

Git GUI

Git GUIにはPUSHボタンがあります-駄洒落を許してください、そしてそれが開くダイアログボックスにはタグのチェックボックスがあります。

タグなしでコマンドラインからブランチをプッシュし、--follow-tags上記のオプションを使用してブランチを再度プッシュしてみました。このオプションは、次の注釈付きタグとして説明されています。私のタグはシンプルなタグでした。

私は何かを修正し、コミットに修正のタグを付け(同僚が修正を選択できるように)、ソフトウェアのバージョン番号を変更して、作成したリリースにタグを付けました(同僚がそのリリースのクローンを作成できるようにするため)。

Gitは戻ってきて、すべてが最新であると述べました。タグを送信しませんでした!おそらくタグに注釈が付けられなかったためです。ブランチに新しいものがなかったためと思われます。

Git GUIで同様のプッシュを実行すると、タグが送信されました。

Git GUIで送信されたタグ

とりあえず、コマンドラインとではなく、Git GUIを使用してリモートに変更をプッシュします--follow-tags

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.