Ich habe ein Projekt mit einem Git-Verzweigungsmodell, das ungefähr dem von nvies Git-Flow folgt .
Unsere Release-Zweige sind im SemVer- Format benannt, zv1.5.2
Sobald ein Release-Zweig grünes Licht für die Produktion hat, schließen wir den Zweig, indem wir ihn in den Master-Zweig zusammenführen, ein Tag anwenden und dann den Zweig löschen.
Da wir den Freigabezweig sofort löschen, verwenden wir denselben Bezeichner zum Kennzeichnen des Zweigs, z v1.5.2
Hier sind die Befehle, die wir zum Schließen eines Release-Zweigs verwenden würden:
$ git checkout master
$ git merge v1.5.2
$ git tag -a v1.5.2 -m "Version 1.5.2 - foo bar, baz, etc"
$ git branch -d v1.5.2
$ git branch -dr origin/v1.5.2
$ git push origin :v1.5.2
$ git push
$ git push --tags
Dies scheint in den meisten Fällen zu funktionieren, es verursacht jedoch ein Problem in dem Szenario, in dem eine andere Instanz des Git-Repos (z. B. ein anderer Entwicklercomputer oder eine Staging-Umgebung) eine lokale Prüfung des Zweigs der Version 1.5.2 durchführt.
Der git push origin :v1.5.2
Befehl löscht den Zweig in der Fernbedienung, löscht jedoch nicht die lokale Version des Zweigs (falls vorhanden) in allen Repos.
Dies führt zu einem mehrdeutigen Hinweis, wenn Sie versuchen, v1.5.2
in diesen Repos auszuchecken:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
Kann dies vermieden werden, ohne eine andere Syntax für die Zweige zu verwenden, z. B. release-v1.5.2
oder v1.5.2-rc
?
Oder ist es unvermeidlich und daher eine grundsätzlich schlechte Idee, ein Tag mit dem gleichen Namen wie ein gelöschter Zweig zu erstellen?
git checkout
das Tag über dem Zweig ausgecheckt wird, wenn es einen ambitionierten Verweis gibt. Dies ist jedoch nicht das Verhalten, das ich sehe . Hat sich das in einer moderneren Version von Git geändert? Gibt es ein Flag, das ich setzen kanngitconfig
, um dieses Verhalten zu erzielen?