595 Stimmen

Git-Commits und Tags gleichzeitig verschieben

Ich bin mir des Grundes bewusst, dass git push --tags ist ein separater Vorgang zum einfachen alten git push . Das Schieben von Tags sollte eine bewusste Entscheidung sein, da man nicht versehentlich ein Tag schieben möchte. Das ist in Ordnung. Aber gibt es eine Möglichkeit, beide gleichzeitig zu verschieben? (Abgesehen von git push && git push --tags .)

9 Stimmen

Was ist Ihr Problem mit git push && git push --tags ?

31 Stimmen

Nichts Besonderes, es ist nur langsamer, da die Verbindung zweimal aufgebaut werden muss.

23 Stimmen

Siehe meine aktualisierte Antwort unten: es gibt eine neue --follow-tags Option seit Git 1.8.3

805voto

VonC Punkte 1117238

Aktualisierung August 2020

Wie ursprünglich erwähnt in este Antwort von SoBeRich und in meinem eigene Antwort ab Git 2.4.x

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

(Anmerkung: dies ist eigentlich funktioniert mit HTTPS nur mit Git 2.24 )

Aktualisierung Mai 2015

Ab dem git 2.4.1 können Sie tun

git config --global push.followTags true

Wenn auf true gesetzt, ist die Option --follow-tags standardmäßig aktiviert.
Sie können diese Konfiguration zum Zeitpunkt des Push-Vorgangs außer Kraft setzen, indem Sie --no-follow-tags angeben.

Wie bereits in dieses Thema von Matt Rogers, der Wes Hurd antwortet :

--follow-tags verschiebt nur kommentierte Tags .

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

Das würde geschoben werden (im Gegensatz zu git tag <tagname> ein leichtes Tag, das nicht gepusht werden würde, da ich hier erwähnt )

Aktualisierung April 2013

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

Die neue " --follow-tags Die Option " sagt " git push " zu beim Auslagern von Zweigen relevante kommentierte Tags einfügen .

Sie können nun versuchen, beim Pushen neuer Übertragungen:

git push --follow-tags

Das wird nicht dazu führen, dass alle die lokalen Tags, sondern nur die, auf die in den Commits verwiesen wird, die mit dem git push .

Mit Git 2.4.1+ (Q2 2015) wird die Option push.followTags : siehe " Wie macht man " git push "Tags innerhalb einer Verzweigung einschließen? ".

Originalantwort, September 2010

Die nukleare Option wäre git push --mirror was dazu führt, dass alle Schiedsrichter unter refs/ .

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

git push origin : v1.0.0 

Sie können die --tags Option mit einem refspec wie:

git push origin --tags :

(seit --tags bedeutet: Alle Schirme unter refs/tags geschoben werden, zusätzlich zu den in der Befehlszeile explizit aufgeführten refspecs )


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

Ein praktischer Tipp wurde soeben auf der Website Git-Mailingliste von Zoltán Füzesi:

Ich benutze .git/config um dieses Problem zu lösen:

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

Mit diesen zusätzlichen Zeilen git push origin werden alle Ihre Zweige und Tags hochgeladen. Wenn Sie nur einige von ihnen hochladen möchten, können Sie sie aufzählen.

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

$ git push && git push --tags

Vorsicht als kommentiert von Aseem Kishore

push = +refs/heads/* se schiebt alle Ihre Zweige nach vorne .

Das ist mir gerade aufgefallen, also zu Ihrer Information.


René Scheibe fügt hinzu. dieser interessante Kommentar :

El --follow-tags Parameter ist irreführend, da nur Tags unter .git/refs/tags berücksichtigt werden.
Wenn git gc ausgeführt wird, werden die Tags von .git/refs/tags a .git/packed-refs . Danach git push --follow-tags ... funktioniert nicht mehr wie erwartet.

0 Stimmen

Vielen Dank für die ausführliche Antwort. Ich habe Angst git push --tags : funktioniert bei mir nicht, aber git push origin --tags : hat . Ich bin mir nicht sicher, ob das ein Konfigurationsproblem auf meiner Seite oder ein Tippfehler auf Ihrer Seite ist.

0 Stimmen

@Will: eher ein Tippfehler meinerseits. Ich habe ihn in meiner Antwort korrigiert.

4 Stimmen

Der eine Kommentar zu dem von Ihnen verlinkten Beitrag weist zu Recht darauf hin, dass die push = +refs/heads/* Zeile Kraft -schiebt todo Ihre Zweige. Dies hat mich gerade gebissen, so FYI.

26voto

SoBeRich Punkte 512

@seit Git 2.4

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

21 Stimmen

Lol, ich glaube, ich würde lieber git push; git push --tags

9 Stimmen

@BlaineLafreniere lol, das ist nicht "zeitgleich" und widerspricht der Frage

1 Stimmen

Warum sollten Sie das alles eintippen, wenn Sie auch etwas Kürzeres eintippen können, um das gleiche Ergebnis zu erzielen?

13voto

rajesh-nitc Punkte 4273

Angenommen, Sie haben ein neues Projektarchiv auf Github erstellt. Der erste Schritt wäre also, das Repo zu klonen: git clone {Your Repo URL}

Sie machen Ihre Arbeit, fügen einige Dateien, Code usw. hinzu und pushen dann Ihre Änderungen mit:

git add .
git commit -m "first commit"
git push

Jetzt befinden sich unsere Änderungen im Hauptzweig. Lassen Sie uns ein Tag erstellen:

git tag v1.0.0                    # creates tag locally     
git push origin v1.0.0            # pushes tag to remote

Wenn Sie den Tag löschen möchten:

git tag --delete v1.0.0           # deletes tag locally    
git push --delete origin v1.0.0   # deletes remote tag

1 Stimmen

Ich habe Ihre Lösung mit git-2.21.0.Windows.1 ausprobiert und festgestellt, dass 3 nur pushes Tag

0 Stimmen

Ich habe in Schritt 1 "git commit -m "msg"" verwendet und es gab keinen Parameter -a. Das könnte der Grund sein. Vielen Dank für die Nachbereitung!

0 Stimmen

@RajeshGupta Es wird NICHT an die Gegenstelle gesendet. Nur lokal zum Ursprung. ausführen git status nach Ihren drei Befehlen und Sie werden etwas sehen wie "Ihr Zweig ist dem Zweig 'origin/develop' um 1 Commit voraus. (verwenden Sie "git push", um Ihre lokalen Commits zu veröffentlichen)"

8voto

rbellamy Punkte 5537

Gerade auf Git 2.31.0 getestet: git push <refspec> --tags . Dies hat den Vorteil, dass es ALLE Tags, nicht nur kommentierte Tags wie --follow-tags .

0 Stimmen

Das funktioniert! Man muss zwar sowohl den Namen der Gegenstelle als auch den Namen des Zweigs explizit angeben, aber zumindest wird die gesamte Arbeit in einem einzigen Schritt erledigt

5voto

Mario Orlandi Punkte 5281

Habe alles ausprobiert.

Die einzige Lösung, die bei mir funktionierte, um zu vermeiden, dass zwei CI-Builds für denselben Commit auf Gitlab ausgelöst werden, war diese:

git push -o ci.skip && git push --tags

wie von @user1160006 in einem Kommentar angeregt .

Ich wiederhole sie hier als richtige Antwort, damit sie für alle Interessierten besser sichtbar ist. Und als eine Erinnerung für mich ;)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X