Warum sollte ich Tags vs. Release / Beta-Zweige für die Versionierung verwenden?


114

Ich benutze git seit ungefähr einem Jahr und möchte Tagging verwenden, um Commits in verschiedenen Versionen zu markieren. Ich habe viele Informationen zu den Befehlen gefunden, die für die Arbeit mit Tags verwendet werden sollen, aber ich möchte wissen, warum Tagging überhaupt verwendet wird, wenn ich nur einen neuen Zweig namens erstellen kann 1.1.0und meine Gedanken nicht mit einem Ganzen trüben muss neuer Satz von Git-Befehlen?

Es muss viele gute Gründe für das Markieren und nicht für das Verzweigen geben, aber ich würde gerne wissen, was diese Vorteile sind.

Antworten:


96

Tags werden hauptsächlich für zukünftige Verweise auf die spezifische Version des Projekts verwendet, indem ein Commit markiert wird. Sie können natürlich immer Zweige verwenden, aber wenn Sie die Versionen häufig ändern, erhalten Sie viele unbenutzte oder selten verwendete Zweige.

In der Praxis sind Tags ohnehin Zweige ohne Zweige. Sie bieten lediglich eine Möglichkeit, auf eine bestimmte Version des Projekts zu verweisen, um die Komplexität zu verringern.

Bearbeiten: Hier ist eine gute Möglichkeit, Git zu verwenden, das ich für alle meine Projekte verwende.


Heh (: Es ist wirklich ein großartiger Workflow, der alle möglichen Lösungen
abdeckt

Ja, ich habe die NVIE-Methode schon einmal gesehen und war ziemlich verwirrt darüber. Trotzdem strebe ich an, es umzusetzen, sobald ich es verstanden habe. Ich denke, mit einem Tag können Sie den Code nicht versehentlich ändern, festschreiben und trotzdem dieselbe Version verwenden. Bei Zweigen kann dies versehentlich passieren. Tags scheinen eine sicherere Methode zum Markieren von Releases zu sein.
Wufoo

2
Das Schöne an der NVIE-Methode war für mich, dass ich sie anfangs nicht verstehen musste. Ich konnte einfach den Abschnitt für das finden, was ich tun wollte, und die Befehle eingeben. Nach ein paar Mal wurde es natürlich und innerhalb weniger Tage tanzte ich wie ein Profi um Zweige!
Killroy

Wenn Sie hoffen, den Gitflow-Ansatz zu verstehen, indem Sie ihn nur blind anwenden, werden Sie alle Vereinfachungen verpassen, die Sie für Ihre Situation anwenden könnten. Und Gitflow ist in der Tat für die meisten Teams ungeeignet: entweder zu komplex oder zu einfach.
Werkzeugschmiede

150

Ein Tag ist unveränderlich .

Während Sie einen Zweig mit dem Namen "1.0.0" erstellen können, können Sie oder jeder mit Festschreibungsrechten auch einfach (absichtlich oder nicht) auf diesen Zweig pushen und ändern, was 1.0.0 bedeutet.

Sie können das nicht mit einem Tag machen, wenn Sie ein Tag erstellt haben - das war's; Tag 1.0.0 bedeutet genau das und kann nicht geändert werden * .

Das ist der praktische Hauptunterschied zwischen einem Tag und einem Zweig

* Sie können ein Tag löschen und neu erstellen, wodurch ein Tag geändert wird, aber sicherlich nicht zufällig.


18

Ich verwende normalerweise einen Workflow, der sowohl Tags als auch Zweige enthält. Tags eignen sich gut zum Markieren von veröffentlichtem Code oder bemerkenswerten Entwicklungs-Builds. Zweige sind gut geeignet, um alle Änderungen zu verfolgen, die für eine bestimmte Version relevant sind.

Hier ist eine gute Beschreibung dieser Art von Workflow: http://nvie.com/posts/a-successful-git-branching-model/


18

Verzweigung und Tag sind dasselbe (Zeiger auf ein Commit, auch bekannt als "ref" ), außer dass Verzweigung automatisch zum nächsten Commit wechselt, während Tag für immer 1 auf demselben Commit bleibt .

Wenn Sie eine Version erstellen, möchten Sie im Allgemeinen den "Snapshot" des Codes markieren, aus dem diese Version erstellt wurde, und Sie möchten, dass er auch dann so markiert bleibt, wenn Sie den Code weiterentwickeln, sodass Sie ein Tag verwenden.

Wenn Sie versuchen, dafür einen Zweig zu verwenden, wird dieser möglicherweise versehentlich zu einem anderen Commit verschoben, aus dem die Version nicht erstellt wurde.


1 Es sei denn, Sie löschen das Tag natürlich.

HINWEIS: Mir ist klar, dass dies eine alte Frage ist, aber ich hatte das Gefühl, dass die Ähnlichkeit (und ein entscheidender Unterschied) zwischen Zweigen und Tags in anderen Antworten nicht so deutlich herausgearbeitet wurde, wie es hätte sein können.


Lieber @downvoter, gibt es einen bestimmten Grund für die Abwertung?
Branko Dimitrijevic

Ich habe Ihre Antwort nicht abgelehnt, aber was meinen Sie mit "Zweig wechselt automatisch zum nächsten Commit"? Zweige werden nicht automatisch zu einem Commit verschoben. Durch Ausführen git commitwird der Kopf des ausgecheckten Zweigs aktualisiert, um auf das neue Festschreiben zu verweisen. Ja, aber kein anderer Zweig wechselt „automatisch“ zum nächsten Festschreiben. Sie sollten den ersten Absatz Ihrer Antwort klarstellen.
Zahnbürste

1
@Toothbrush Klar, das habe ich mit "automatisch bewegt" gemeint. Branch "besitzt" jedoch keine Commits, zeigt nicht einmal auf eine Reihe von Commits, sondern nur auf ein Commit (und der Rest kann manchmal ungenau impliziert werden, indem das Commit-Diagramm durchlaufen wird). Unter git ist branch nur eine einzeilige Datei unter .git\refs\heads, die den Hash des Commits enthält. Commits selbst "erinnern" sich nicht daran, welcher Zweig sie erstellt hat. Dies unterscheidet sich beispielsweise von Mercurial, bei dem die Zweiginformationen in die Metadaten des Commits geschrieben werden können.
Branko Dimitrijevic

Ja, aber viele Leute wissen das nicht - besonders Neulinge, die verwirrt sind über die unzähligen Möglichkeiten, die online vorgeschlagen werden, um Dinge mit Git zu tun.
Zahnbürste

6

Sie verwenden Tags, um wichtige Commits im Verlauf zu notieren. "Dies war genau das Commit, das wir an diesem regnerischen Donnerstag, als der Build-Server kaputt ging, für diese Version verwendet haben." Wenn Sie einen Zweig anstelle eines Tags verwenden, können Sie nie genau wissen, welches Commit Sie verwendet haben. Sie wissen nur "Wir haben Version 1.1.0 irgendwo in diesem Zweig veröffentlicht", es sei denn, Sie notieren den genauen Hash für dieses Commit manuell, weshalb Sie zuerst Tags verwenden :)


4
Ich denke, er meinte, einen Zweig mit dem Namen 1.1.0 zu erstellen und ihn nicht mehr zu verwenden, damit er das Projekt in der genannten Version darstellt.
Hakan Deryal

2

Neben den anderen Antworten sind hier meine 2 Cent.

Kurze Antwort: Verwenden Sie Tags für Release-Versionen

Lange Antwort: Ich glaube, dass die Verwendung von Tags für die Release-Versionierung besser ist als die Verwendung von Zweigen. Wenn Sie die Relase aktualisieren müssen, verzweigen Sie einfach vom getaggten Commit und erstellen Sie nach Abschluss der Arbeit an diesem Zweig (höchstwahrscheinlich einem Hotfix-Zweig) ein neues Tag am Kopf dieses neuen Zweigs mit der neuen Version. Führen Sie diesen Zweig dann wieder in Master / Develop zusammen, da Sie eine Release-Version wirklich nicht ändern sollten, es sei denn, es handelt sich um einen Hotfix, der wahrscheinlich wieder in Ihren Quellcode eingefügt werden sollte. Löschen Sie dann diesen Zweig, da er nicht mehr benötigt wird. Wenn Sie einen anderen Hotfix auf diese neue Version anwenden müssen, wiederholen Sie die gleichen Schritte.

Lesen Sie den Abschnitt des folgenden Artikels, in dem gezeigt wird, wie ein Hotfix mit dem Git-Workflow des Autors zusammengeführt wird - https://hackernoon.com/a-branching-and-releasing-strategy-that-fits-github-flow-be1b6c48eca2

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.