Wie schiebe ich ein Tag mit Git in ein Remote-Repository?


2218

Ich habe ein Remote-Git-Repository auf meinen Laptop geklont und wollte dann ein Tag hinzufügen, damit ich es ausführen konnte

git tag mytag master

Wenn ich git tagauf meinem Laptop laufe, wird das Tag mytagangezeigt. Ich möchte dies dann in das Remote-Repository verschieben, damit ich dieses Tag auf allen meinen Clients habe, also starte ich, git pushaber ich habe die folgende Meldung erhalten:

alles aktuell

Und wenn ich zu meinem Desktop gehe git pullund git tagstarte, werden keine Tags angezeigt.

Ich habe auch versucht, eine geringfügige Änderung an einer Datei im Projekt vorzunehmen und sie dann auf den Server zu übertragen. Danach konnte ich die Änderung vom Server auf meinen Desktop-Computer übertragen, aber auf meinem Desktop-Computer ist immer noch kein Tag vorhanden git tag.

Wie kann ich mein Tag in das Remote-Repository verschieben, damit alle Client-Computer es sehen können?

Antworten:


1090

git push --follow-tags

Dies ist eine vernünftige Option, die in Git 1.8.3 eingeführt wurde:

git push --follow-tags

Es werden sowohl Commits als auch nur Tags gepusht, die beide sind:

  • kommentiert
  • erreichbar (ein Vorfahr) von den Push-Commits

Das ist vernünftig, weil:

Aus diesen Gründen --tagssollte vermieden werden.

Git 2.4 hat die push.followTagsOption hinzugefügt , dieses Flag standardmäßig zu aktivieren, mit der Sie Folgendes festlegen können:

git config --global push.followTags true

16
Vielen Dank dafür, es ist sinnvoll, alles auf einmal zu pushen, anstatt Inhalte zu pushen und dann Tags separat zu pushen.
Shane

1
Es war mir nicht sofort klar, dass es sich um eine Beziehung zwischen "kommentiert" und "erreichbar von den Push-Commits" handelte. Ich hoffte, es würde alle erreichbaren Tags verschieben, egal ob kommentiert oder nicht. Vielleicht bearbeiten, um sicherzustellen, dass es kein OP ist?
Gauthier

Also, während ich das tat, gehe ich zurück zu Bitbucket. Sollte ich irgendwo eine Tag-Liste sehen, außer dass ich sie von der Kommandozeile aus sehen kann?
PositiveGuy

10
Dies funktioniert bei mir in Git 2.5.0 nicht, git push origin --tagstut es aber .
Nnyby

3
Danke für den push.followTags Tipp. Ich kann nicht glauben, dass dies nicht die Standardvorgabe ist. Ohne sie müssen Sie nicht einmal taggen, Sie werden die Synchronisations-Tags vergessen und nicht mehr synchronisieren.
Moodboom

3607

So pushen Sie ein einzelnes Tag:

git push origin <tag_name>

Und der folgende Befehl sollte alle Tags pushen ( nicht empfohlen ):

git push --tags

426
Ich empfehle, andere nicht zu verwenden oder zu schulen, git push --tagsda es sehr, sehr schwierig sein kann, schlechte Tags zu entfernen, wenn Ihre Mitarbeiter darin geschult sind, alle Tags zu pushen, da die Leute weiterhin die alten schlechten Tags pushen, die sie lokal haben, wann immer sie wollen um ein neues Tag zu pushen. Aus diesem Grund werde ich nur jedem raten, git push origin <tag_name>jetzt zu verwenden .
Scott Jungwirth

43
So verschieben Sie ein verschobenes Tag: git push origin <tag_name> --force
Bob Stein

38
Nun @ScottJungwirth Ich denke, als Entwickler sollte man vorsichtig sein. Andernfalls können Sie auch raten, die verfügbaren Befehle überhaupt nicht zu unterrichten.
Willa

18
Wenn Ihr Tag mit dem Remote-Zweig identisch ist und mit git pushfehlschlägt error: src refspec <tag_name> matches more than one., können Sie es alsgit push origin tag <tag_name>
Volodymyr Sapsai

5
Nun @Willa war die Frage "Schieben Sie ein Tag auf ein Remote-Repo." Also git push origin <tag_name>ist eine viel bessere Antwort auf diese Frage. ;)
Wildcard

265

Um bestimmte zu pushen, folgt ein Tag git push origin tag_name


99

Um Trevors Antwort zu erweitern , können Sie ein einzelnes Tag oder alle Ihre Tags gleichzeitig verschieben.

Schieben Sie ein einzelnes Tag

git push <remote> <tag>

Dies ist eine Zusammenfassung der relevanten Dokumentation , die dies erklärt (einige Befehlsoptionen wurden der Kürze halber weggelassen):

git push [[<repository> [<refspec>…]]

<refspec>...

Das Format eines <refspec>Parameters ist… die Quellreferenz <src>, gefolgt von einem Doppelpunkt :, gefolgt von der Zielreferenz <dst>

Die <dst>Meldungen, welche Referenz auf der Remote-Seite mit diesem Push aktualisiert wird… Wenn :<dst>weggelassen wird, wird dieselbe Referenz wie <src>aktualisiert…

Tag <tag>bedeutet dasselbe wie refs/tags/<tag>:refs/tags/<tag>.

Schieben Sie alle Ihre Tags auf einmal

git push --tags <remote>
# Or
git push <remote> --tags

Hier ist eine Zusammenfassung der relevanten Dokumentation (einige Befehlsoptionen wurden der Kürze halber weggelassen):

git push [--all | --mirror | --tags] [<repository> [<refspec>…]]

--tags

Alle Refs unter refs/tagswerden zusätzlich zu den Refspecs, die explizit in der Befehlszeile aufgeführt sind, gepusht.


In diesem Beispiel wird das Schlüsselwort weggelassen tag. zB git push origin tag funny-tag-1.
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Du brauchst es nicht. Sie schieben ein einzelnes Tag wie folgt zum Ursprung: git push origin my-tag(Ich habe es gerade versucht!)
Andres F.

Ich habe Version 1.9.1 verwendet , was ist mit dir @AndresF. ?
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Version 2.10.2. Vielleicht ist es das?
Andres F.


51

Sie können alle lokalen Tags mit einem einfachen git push --tagsBefehl verschieben.

$ git tag                         # see tag lists
$ git push origin <tag-name>      # push a single tag
$ git push --tags                 # push all local tags 


15

Ich verwende, git push <remote-name> tag <tag-name>um sicherzustellen, dass ich ein Tag drücke. Ich benutze es wie : git push origin tag v1.0.1. Dieses Muster basiert auf der Dokumentation ( man git-push):

OPTIONS
   ...
   <refspec>...
       ...
       tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.

1
Hervorragend, sollte oben gewesen sein - da es sicherstellt, dass ein Tag, kein Zweig, durch Fehler verschoben wird.
Samshers
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.