Drücken Sie git Commits & Tags gleichzeitig

387

Ich bin mir des Grundes bewusst, der git push --tagseine separate Operation ist, die einfach alt ist git push. Das Pushen von Tags sollte eine bewusste Wahl sein, da Sie nicht versehentlich eines pushen möchten. Das ist gut. Aber gibt es eine Möglichkeit, beide zusammenzubringen? (Abgesehen von git push && git push --tags.)

Will Robertson
quelle
4
Was ist dein Problem mit git push && git push --tags?
Fuz
21
Nichts Besonderes, es ist nur langsamer, da die Verbindung zweimal hergestellt werden muss.
Will Robertson
16
Siehe meine aktualisierte Antwort unten: Es gibt eine neue --follow-tagsOption seit Git 1.8.3
VonC
24
Ein weiterer Grund, diese nicht separat auszuführen, besteht darin, zu vermeiden, dass zwei CI-Builds für dasselbe Commit ausgelöst werden, wenn diese Art der Automatisierung vorhanden ist.
Alex R
unterscheidet auch --tagsnicht zwischen leichten und kommentierten Tags Quelle
Karlsebal

Antworten:

555

Update Mai 2015

Ab Git 2.4.1 können Sie dies tun

git config --global push.followTags true

Wenn auf true gesetzt, aktivieren Sie standardmäßig die Option --follow-tags.
Sie können diese Konfiguration zum Zeitpunkt des Push überschreiben, indem Sie --no-follow-tags angeben.

Wie in diesem Thread von Matt Rogers erwähnt, der Wes Hurd antwortet :

--follow-tags schiebt nur kommentierte Tags .

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

Das würde geschoben werden (im Gegensatz zu git tag <tagname>einem leichten Tag, das nicht geschoben würde, wie ich hier erwähnte )

Update April 2013

Seit Git 1.8.3 (22. April 2013) müssen Sie nicht mehr zwei Befehle ausführen, um Zweige und dann Tags zu verschieben :

Die neue --follow-tagsOption " " weist " git push" an , relevante mit Anmerkungen versehene Tags zu verschieben, wenn Zweige herausgeschoben werden .

Sie können jetzt versuchen, wenn Sie neue Commits pushen:

git push --follow-tags

Dadurch werden jedoch nicht alle lokalen Tags gepusht, sondern nur die, auf die durch Commits verwiesen wird, die mit dem gepusht werden git push.

In Git 2.4.1+ (2. Quartal 2015) wird die Option eingeführt push.followTags: Siehe " So wird" git push"Tags in einen Zweig aufgenommen? ".

Ursprüngliche Antwort, September 2010

Die nukleare Option wäre git push --mirror, die alle Schiedsrichter unter Druck setzen wird refs/.

Sie können mit Ihrem aktuellen Branch Commit auch nur ein Tag pushen:

git push origin : v1.0.0 

Sie können die --tagsOption mit einer Referenzspezifikation wie der folgenden kombinieren :

git push origin --tags :

(da --tagsbedeutet: Alle Refs unter refs/tagswerden gepusht, zusätzlich zu den Refspecs, die explizit in der Befehlszeile aufgeführt sind )


Sie haben auch diesen Eintrag " Verschieben von Zweigen und Tags mit einem einzigen" Git Push "-Aufruf "

Ein praktischer Tipp wurde gerade von Zoltán Füzesi auf die Git-Mailingliste gesetzt :

Ich benutze .git/config, um dies zu lösen:

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

Wenn diese Zeilen hinzugefügt werden, git push originwerden alle Ihre Zweige und Tags hochgeladen. Wenn Sie nur einige davon hochladen möchten, können Sie sie auflisten.

Ich habe es noch nicht selbst ausprobiert, aber es sieht so aus, als ob es nützlich sein könnte, bis eine andere Möglichkeit zum gleichzeitigen Verschieben von Zweigen und Tags zu git push hinzugefügt wird.
Andererseits macht es mir nichts aus zu tippen:

$ git push && git push --tags

Vorsicht , wie von Aseem Kishore kommentiert

push = +refs/heads/*wird alle deine Zweige zwangsschieben .

Das hat mich gerade gebissen, also zu Ihrer Information.


René Scheibe fügt diesen interessanten Kommentar hinzu :

Der --follow-tagsParameter ist irreführend, da nur Tags unter .git/refs/tagsberücksichtigt werden.
Wenn git gces ausgeführt wird, werden Tags von .git/refs/tagsnach verschoben .git/packed-refs. Danach git push --follow-tags ...funktioniert es nicht mehr wie erwartet.

VonC
quelle
3
Der ein Kommentar auf dem Beitrag , den Sie richtig verknüpfen weist darauf hin , dass die push = +refs/heads/*Linie Kraft -pushes alle Ihre Filialen. Das hat mich gerade gebissen, also zu Ihrer Information.
Aseem Kishore
2
Betreff: Das --follow-tagsin Git 1.8.3 hinzugefügte Flag. Kann ich meine Git-Installation so konfigurieren, dass dies die Standardeinstellung ist?
Trevor Burnham
1
@TrevorBurnham Nein, nur der Wert von push.default( git-scm.com/docs/git-config ) Standardaktionen auf Push definieren kann ( nothing, matching, upstream, simplewie in stackoverflow.com/a/10002469/6309 ). Sie müssen --follow-tagexplizit hinzufügen .
VonC
1
@VonC Was ist, wenn ich das Tag erzwingen möchte? git push --follow-tags -fhat bei mir nicht funktioniert.
Mauryat
1
Der --follow-tagsParameter ist irreführend, da nur Tags unter .git/refs/tagsberücksichtigt werden. Wenn git gces ausgeführt wird, werden Tags von .git/refs/tagsnach verschoben .git/packed-refs. Danach git push --follow-tags ...funktioniert es nicht mehr wie erwartet.
René Scheibe
4

Vielleicht hilft das jemandem:

 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          
Rajesh Gupta
quelle
Ich habe Ihre Lösung mit git-2.21.0.windows.1 ausprobiert und festgestellt, dass 3 nur das Tag drückt
Dustin Sun
Es funktioniert gut an meinem Ende. Sie versuchen alle 3 Befehle in der richtigen Reihenfolge und das Remote-Repo ist eingestellt (git remote -v)?
Rajesh Gupta
Ich habe "git commit -m" msg "in Schritt 1 verwendet und es gab keinen -a-Parameter. Dies könnte der Grund sein. Vielen Dank für das Follow-up!
Dustin Sun
2

@ seit Git 2.4

git push --atomic origin <branch name> <tag>

SoBeRich
quelle
0

Git GUI

Git GUI hat eine PUSH-Schaltfläche - entschuldigen Sie das Wortspiel, und das Dialogfeld, das es öffnet, enthält ein Kontrollkästchen für Tags.

Ich habe einen Zweig über die Befehlszeile ohne Tags --follow-tagsverschoben und dann erneut versucht, den Zweig mit der oben beschriebenen Option zu verschieben. Die Option wird wie folgt beschrieben: Kommentierte Tags. Meine Tags waren einfache Tags.

Ich habe etwas behoben, das Commit mit dem Fix in markiert (damit Kollegen das Update auswählen können), dann die Versionsnummer der Software geändert und die von mir erstellte Version markiert (damit Kollegen diese Version klonen können).

Git kehrte zurück und sagte, alles sei auf dem neuesten Stand. Die Tags wurden nicht gesendet! Vielleicht, weil die Tags nicht kommentiert wurden. Vielleicht, weil es in der Branche nichts Neues gab.

Als ich einen ähnlichen Push mit Git GUI machte, wurden die Tags gesendet.

Tags mit Git GUI gesendet

Vorerst werde ich meine Änderungen an meinen Fernbedienungen mit der Git-GUI und nicht mit der Befehlszeile und übertragen --follow-tags.

Ivan
quelle