Soll ein Release-Zweig oder der Master-Zweig markiert werden, wenn der Gitflow verwendet wird?

16

Dieses Problem weist auf Folgendes hin:

Nach meinem Verständnis ist das Platzieren des Tags auf dem Release-Zweig vor dem Zusammenführen (und nicht auf dem Master-Zweig) in der Tat das Richtige, so dass es auch von git describe --tags aus dem Entwicklungszweig gefunden werden kann. Siehe # 374

während eines anderen Beitrags :

Ich habe heute versehentlich die Version 0.4.2-pre über Homebrew installiert und war verwirrt darüber, wie das Tagging in dieser Version funktioniert. Zuvor (Version 0.4.1) wurde das Tag im Hauptzweig erstellt, nachdem der Freigabezweig darin zusammengeführt wurde. Nun scheint es, dass das Tag beim letzten Festschreiben des Release-Zweigs erstellt wird, was für mich keine gute Idee zu sein scheint. Insbesondere, wenn Sie ein Build-System haben, das sich auf Git-Tags stützt und eine Release-Version erstellt, wenn HEAD ein getaggter Commit ist, und eine Entwicklungsversion, wenn es sich um einen der folgenden Commits handelt. Könnte mir jemand die Logik hinter dieser Änderung erklären? Und in Bezug auf die semantische Versionierung würde ich dies nicht als Versionserhöhung in der Patch-Ebene betrachten!

In unserem Team haben und hatten wir mehrere Diskussionen darüber. Einige geben an, dass ein Tag aus dem Hauptzweig erstellt werden muss, während andere den Freigabezweig bevorzugen. Nach dem Gitflow-Bild:

Bildbeschreibung hier eingeben

Es sieht so aus, als ob das Tag auf dem Master platziert ist.

030
quelle
1
Ich weiß, dass GitLab Probleme mit Tags auf Zweigen hat, wenn Sie ältere Zweige wegschneiden. Es wäre also besser, wenn das Tag auf dem Master wäre. Nicht sicher über andere Git-Tools.
HorusKol
'The gitflow' impliziert, dass dieser (IMO-arme) Workflow der Standard- oder offizielle Git-Workflow ist. Ist es nicht.
Miles Rout
@MilesRout Was ist dein Lieblings-Git-Workflow?
030
In meinem Fall benenne ich die Version der App bei der Veröffentlichung mit den Werten von git tag, sodass ich sie im Veröffentlichungszweig mache.
Denken Sie zweimal Code einmal

Antworten:

16

Erstens können Sie keine Zweige markieren, sondern nur Commits.

Sie sollten das Commit markieren, das Sie tatsächlich freigeben. Darum geht es beim Versions-Tagging. Wenn Sie in einer bestimmten Umgebung (Produktion oder auf andere Weise) ein Problem mit Ihrer Software haben, können Sie mit Zuversicht sagen, dass das Problem durch das Commit verursacht wurde, von dem diese Version abgeleitet wurde.

(Aus diesem Grund sprechen die Leute von "reproduzierbaren Builds": Sie können also sicher sein, dass ihr Veröffentlichungsprozess keine neuen Fehler verursacht, die in ihrer Vorschau- / Staging-Umgebung nicht vorhanden waren, und dass, wenn sie einen Fehler in der Produktion haben, derselbe binär läuft auf ihrem Rechner, wenn sie es debuggen.)

Es hat keinen Sinn, das zweite grüne Commit von unten (das grüne Kind des Commits mit der Aufschrift 'Only bugfixes!') Mit 'v1.0' zu kennzeichnen, da Sie dieses Commit nicht für die Produktion freigegeben haben. Sie haben das Commit für den Master freigegeben. Sie können sogar sehen, dass Git Flow das als 'Tag 1.0' markiert hat.

Denken Sie daran, Tags haben einen Zweck: Commits leicht zu finden. Sie kennzeichnen ein Commit als 'v1.0', damit Sie das als Version 1.0 veröffentlichte Objekt leicht finden können. Sie kennzeichnen es nicht, um ein 'v1.0'-Tag irgendwo in Ihrem Commit-Baum zu haben, und zwar ungefähr in der Nähe des Commits, das Sie tatsächlich freigegeben haben.

Wenn Sie Probleme haben, die Tags aus Ihrem Entwicklungszweig zu finden, ist dies ein völlig anderes Problem. Korrigieren Sie das Tool, mit dem Sie Tags finden. Oder noch besser: benutze kein git-flow. In diesem Diagramm sieht es wegen der schönen farbigen Punkte und der hübsch angelegten Linien gut aus, aber in Wirklichkeit sieht es aus wie ein verrücktes chaotisches Netz aus farbigen Linien und Punkten.

Miles Rout
quelle
3
You should tag the commit you actually release. Wenn sich zum Beispiel 20 Commits, die freigegeben werden müssen, im Freigabezweig befinden und dieser Zweig mit dem Master zusammengeführt wird, muss der erzeugte Merge-Commit markiert werden, um zu wissen, was freigegeben wurde.
030
1
Ja, das Merge-Commit wird markiert. Als eine Variante von git-flow habe ich auch gesehen, wie ein separates "Version Bump Commit" direkt ambranch:master
rmharrison 21.12.18