Frage Wie benennt man ein Git-Tag um?


Heute habe ich durch die Protokolle nach einem Projekt gesucht und festgestellt, dass ich vor einiger Zeit einen Tag-Namen fett gefingert habe. Gibt es eine Möglichkeit, das Tag umzubenennen? Google hat nichts Nützliches gefunden.

Mir ist klar, dass ich die getaggte Version ausprobieren und ein neues Tag erstellen könnte, das habe ich sogar ausprobiert. Aber das scheint ein Tag-Objekt zu erzeugen, das nicht ganz richtig ist. Für eine,

git tag -l

listet es im Verhältnis zu allen anderen Tags auf. Ich habe keine Ahnung, ob das wichtig ist, aber es lässt mich glauben, dass das neue Tag-Objekt nicht ganz das ist, was ich möchte. Ich kann damit leben, weil es mir wirklich nur wichtig ist, dass der Tag-Name mit der Dokumentation übereinstimmt, aber ich würde es lieber "richtig" machen, vorausgesetzt, es gibt einen richtigen Weg, dies zu tun.


966
2018-06-22 18:09


Ursprung


Antworten:


Hier ist, wie ich ein Tag umbenenne old zu new:

git tag new old
git tag -d old
git push origin :refs/tags/old
git push --tags

Der Doppelpunkt im Push-Befehl entfernt das Tag aus dem Remote-Repository. Wenn Sie dies nicht tun, erstellt Git beim Ziehen das alte Tag auf Ihrem Computer.

Stellen Sie abschließend sicher, dass die anderen Benutzer das gelöschte Tag entfernen. Bitte sagen Sie ihnen (Mitarbeiter), den folgenden Befehl auszuführen:

git pull --prune --tags

1640
2018-04-19 16:51



Die ursprüngliche Frage war, wie man ein Tag umbenennt, was einfach ist: Zuerst NEW als Alias ​​von OLD erstellen: git tag NEW OLD dann lösche OLD: git tag -d OLD.

Das Zitat bezüglich "der Git Weg" und (Un) Vernunft ist von der Basis, weil es darum geht, einen Tag-Namen beizubehalten, aber es sich auf einen anderen Repository-Zustand beziehen.


270
2017-12-09 13:34



Zusätzlich zu den anderen Antworten:

Zuerst müssen Sie ein erstellen alias des alt Tag-Name, der auf den ursprünglichen Commit verweist:

git tag new old^{}

Dann müssen Sie den alten löschen örtlich:

git tag -d old

Löschen Sie dann das Tag an Ihren Remote-Standorten:

# Check your remote sources:
git remote -v
# The argument (3rd) is your remote location,
# the one you can see with `git remote`. In this example: `origin`
git push origin :refs/tags/old

Schließlich müssen Sie Ihr neues Tag zum entfernten Standort hinzufügen. Bis Sie dies getan haben, die neuen Tag (s) wird nicht hinzugefügt werden:

git push origin --tags

Iterate dies für jeden entfernten Ort.

Sei dir bewusst, von der Auswirkungen, die eine Änderung von Git-Tags hat an die Verbraucher eines Pakets!


100
2018-04-27 11:42



Wenn es veröffentlicht wird, können Sie es nicht löschen (ohne Gefahr zu laufen geteert zu werden). Der 'Git Weg' ist zu tun:

Das gesunde Ding. Gib einfach zu, dass du es vermasselt hast und benutze einen anderen Namen. Andere haben bereits einen Tag-Namen gesehen, und wenn Sie den gleichen Namen behalten, können Sie in der Situation sein, dass zwei Leute beide "Version X" haben, aber sie haben tatsächlich unterschiedliche "X". Also nenne es einfach "X.1" und sei damit fertig.

Alternative,

Das wahnsinnige Ding. Du willst die neue Version auch wirklich "X" nennen, obwohl andere schon die alte Version gesehen haben. Also benutze einfach wieder git-tag -f, als hättest du das alte nicht schon veröffentlicht.

Es ist so verrückt, weil:

Git ändert (und sollte es nicht) die Tags hinter den Benutzern zurück. Wenn also jemand das alte Tag schon hat, sollte ein Git-Pull an deinem Baum nicht nur dazu führen, dass der alte überschrieben wird.

Wenn jemand ein Release-Tag von Ihnen bekommen hat, können Sie nicht einfach das Tag für sie ändern, indem Sie Ihr eigenes aktualisieren. Dies ist ein großes Sicherheitsproblem, da die Leute ihren Tag-Namen vertrauen müssen. Wenn du wirklich das Wahnsinnige machen willst, musst du dich einfach daran halten und den Leuten erzählen, dass du versagt hast.

Alle mit freundlicher Genehmigung der Manpages.


25
2018-06-22 18:10



Diese Wiki-Seite hat diesen interessanten One-Liner, der uns daran erinnert, dass wir pushen können mehrere Referenzen:

git push origin <refs/tags/old-tag>:<refs/tags/new-tag> :<refs/tags/old-tag> && git tag -d <old-tag>

und andere Kloner bitten git pull --prune --tags

Die Idee ist also:

  • <new-tag> für jedes Commit, auf das verwiesen wird <old-tag>: <refs/tags/old-tag>:<refs/tags/new-tag>,
  • die Löschung von <old-tag>: :<refs/tags/old-tag>

Siehe als BeispielNamenskonvention von Tags in einem Git-Repository ändern?".


22
2018-06-16 14:20



Als Ergänzung zu den anderen Antworten habe ich einen Alias ​​hinzugefügt, um alles in einem Schritt zu machen, mit einem vertrauten * nix move command feel. Argument 1 ist der alte Tag-Name, Argument 2 ist der neue Tag-Name.

[alias]
    renameTag = "!sh -c 'set -e;git tag $2 $1; git tag -d $1;git push origin :refs/tags/$1;git push --tags' -"

Verwendung:

git renametag old new

19
2017-11-17 15:00



Für die Abenteuerlustigen kann es in einem Befehl getan werden:

mv .git/refs/tags/OLD .git/refs/tags/NEW

6
2017-07-13 09:24



Der einfache Teil besteht darin, lokale Tags umzubenennen. Der schwierigere Teil sind die Ferngesteuerten. Die Idee hinter diesem Trick besteht darin, den alten Tag / Zweig zu einem neuen zu kopieren und den alten zu löschen, ohne zu checken.

Remote-Tag-Umbenennung / Remote-Zweig → Tag-Konvertierung: (Beachten: :refs/tags/)

git push <remote_name> <old_branch_or_tag>:refs/tags/<new_tag> :<old_branch_or_tag>

Remote-Umbenennung / Remote-Tag → Zweigkonvertierung: (Beachten: :refs/heads/)

git push <remote_name> <old_branch_or_tag>:refs/heads/<new_branch> :<old_branch_or_tag>

Ausgabe, die ein Remote-Tag umbenennt:

D:\git.repo>git push gitlab App%2012.1%20v12.1.0.23:refs/tags/App_12.1_v12.1.0.23 :App%2012.1%20v12.1.0.23

Total 0 (delta 0), reused 0 (delta 0)
To https://gitlab.server/project/repository.git
 - [deleted]               App%2012.1%20v12.1.0.23
 * [new tag]               App%2012.1%20v12.1.0.23 -> App_12.1_v12.1.0.23

1
2018-02-17 13:41