2016-06-02 13 views
0

Ich mag die NVIE Modell git Verzweigung und hat versucht, die meisten der Prinzipien zu übernehmen: http://nvie.com/posts/a-successful-git-branching-model/Welche Git Zweige soll ich markieren?

Es ist wirklich nicht herauskommt und es sagen, aber es bedeutet, dass Sie nur den Master-Zweig markieren sollten. Machen die meisten Menschen das? Der Grund, warum ich frage, ist, dass ich oft einen Build aus der Entwicklungsabteilung oder aus einem Feature-Zweig habe, den ich zum Testen an andere Leute senden möchte (vertrauenswürdige Kunden oder interne Testgruppe). Es macht keinen Sinn, es wieder in Master zu integrieren, aber es scheint auch sinnvoll zu sein, es zu markieren oder anderweitig eine Versionsnummer darauf zu setzen, um es während weiterer Tests zu verfolgen, insbesondere, weil Bugs kontinuierlich behoben werden und Features sind hinzugefügt auf verschiedenen Zweigen wie wir gehen.

Ich habe viel über Versionsnummern wie main.minor.patch.build gelesen. Ich sehe einige Vorteile darin, die Build-Nummer für diese "Zwischen-Builds" zu verfolgen. Aber ich könnte mir auch vorstellen, dass mehrere Commits aus mehreren Zweigen versehentlich die exakt gleiche Versionsnummer haben, wenn ich nicht vorsichtig damit bin.

Also sollte ich Tags nur auf den Master-Zweig beschränken? Wenn ja, wie behalte ich die Versionen im Auge, die von anderen Zweigen gesendet werden?

Danke für alle Eingabe!

+0

Siehe http://stackoverflow.com/questions/1457103/how-is-a-tag-different-from-a-branch-which-should-i-use-here – Jubobs

Antwort

3

Es müssen keine Tags verwendet werden. Stattdessen könnten Sie eine gekürzte Git Commit-ID verwenden:

major.minor.patch.build 

dann

3.7.1.b79bbd3 

begehen IDs praktisch nicht kollidieren würde garantiert.

+0

Upvoted für einfache Lösung. Prägnant, macht deutlich, auf welcher Version der Build basiert, und wie Sie sagten, sind Kollisionen nahezu unmöglich. – cyberbit

+0

Das sieht sehr ähnlich wie die Ausgabe von 'git beschreiben' – 1615903

+0

Schöne Idee. Empfehlen Sie, diese vollständige Versionsnummer in Ihrem zu erstellenden Code zu speichern, damit Benutzer sie sehen können? Im Moment habe ich einen git post-commit Hook, der den Commit-Hash in eine Datei schreibt, die in meinen Build kompiliert wird. Ich könnte versuchen, es in die vollständige Versionsnummer zu formatieren, wie Sie getan haben. Bedeutet das auch, dass Sie nur Major, Minor oder Patch auf dem Master-Zweig ändern (das Build-Segment verlassen, um Builds zu identifizieren, die aus anderen Zweigen stammen)? – mitch

1

Meine Regel besteht darin, jedes Commit zu markieren, das zum Erzeugen eines Build-Artefakts verwendet wird, das von der Dev-Maschine weggeht, unabhängig davon, ob es sich um ein internes Testen oder eine öffentliche Freigabe handelt. Und Sie sollten dieses Tag irgendwo in UI Ihrer app/site was auch immer freilegen, so dass, wenn Sie einen Fehlerbericht erhalten, Sie diesen Verweis mit genauem commit kreuzen können.

Zum Beispiel alle meine Updates zu master und develop Filialen werden automatisch von CI (diese Builds sind für interne Tests vorgesehen) im Format build-xxx getaggt. Zusätzlich markiere ich master mit Tags wie vX.Y.Z für jeden Build, der live geht.

Update

Ein Hinweis zu Kollision: Sie Ihre CI einrichten können, so dass alle Kennungen bauen garantiert um 1 über alle Zweige incrented werden.

Wenn Sie nicht über CI verwenden Sie können ein verwenden SHA1 als Build-Kennung verpflichten, die in Ihrer App zu einem Benutzer ausgesetzt ist, in diesem Fall können Sie sich auch alle mit Zwischen Tags überspringen und bleiben nur vX.Y.Z. diejenigen

Update 2

Ein Hinweis-Tags zum Erstellen für Zwischen baut: Sie selbst Hunderte von Tags finden kann, die, so Tags für Zwischen kurzlebiger Schaffung baut möglicherweise nicht die beste Lösung und in diesem Fall SHA1 wäre besser, während Sie Tags für wirklich produktionsfertige stabile Versionen haben.

Dies ist etwas, das wirklich von Zweck, Menge und Häufigkeit der Builds abhängt, die Sie tun.

+0

Entschuldigung für meine Unwissenheit, aber können Sie mich auf das CI-Tool verweisen? Ist das etwas, das du innerhalb von git oder als Teil deines Post-Build-Prozesses ausführst? – mitch

+1

@mitch CI ist eine "Continuous Integration", normalerweise ist es eine Web-App, die irgendwo neben deinem Git-Repo gehostet wird und es kann so eingerichtet werden, dass es Builds auslöst, wenn du etwas zum Remote-Repo schiebst. CI-Tool, das ich insbesondere verwende, ist https://jenkins.io. Wenn Ihr Prozess keinen Remote Repo oder dedizierten Server mit CI beinhaltet, können Sie natürlich ein paar Skripte für sich selbst schreiben, die Sie manuell starten können und die Dinge tun, die ich beschrieben habe (wie Tags erstellen, Tags in Ihre Software einfügen usw.).) –

+1

@mitch Ich wollte eigentlich Skripte schreiben, die den Deployment-Prozess selbst mit dem Erstellen von Tags und dergleichen in einer einzigen Routine kombinieren, sodass Sie während der Bereitstellung nicht vergessen, etwas zu tun. –