2016-07-04 18 views
1

Wir haben ein Git Repo für die Entwicklung verwendet. Von Zeit zu Zeit machen wir Releases, die mit Tags markiert sind. Es gibt auch ein automatisiertes Build-System, mit dem wir die neueste getaggte Version erstellen möchten. In der Zwischenzeit werden die Commits wie üblich vorangetrieben.Tagging neuesten Release?

Wie markieren wir das neueste Release, damit der automatisierte Build es aufnehmen kann?

Es ist wichtig, dass das automatisierte System immer die Version von derselben URL auswählt. Es kann kein Skript mit describe oder einer anderen Abrufzeitmethode zum Auflösen des neuesten Tags verwendet werden.

Die erste Idee besteht darin, ein bestimmtes Lightweight-Tag wie LAST_RELEASE zu verwenden und jedes Mal, wenn ein Release markiert wird, zu verschieben (löschen und neu erstellen?). Eine andere Idee besteht darin, einen separaten Zweig zu unterhalten und seinen Kopf synchron mit dem letzten Release-Tag zu halten. Eine weitere Idee besteht darin, einen Zweig zu verwenden, aber anstatt ihn mit Merges/Rebases synchron zu halten, löschen Sie ihn einfach und erstellen Sie ihn für jedes Release neu.

Ich mag keine dieser Methoden. Gibt es einen vernünftigen Weg, dies zu erreichen?

+0

Warum müssen Sie die Version von derselben URL auswählen? Kannst du nicht auch eine kleine Webanwendung schreiben, die auf die gleiche URL antwortet, aber 'describe' unter der Haube benutzt? – choroba

+0

@choroba Weil ich nicht für die gesamte Unternehmensinfrastruktur verantwortlich bin. Build People haben ihren Build-Server, der auf eine bestimmte Art und Weise läuft. Ich kann eine Repo-URL zum Abrufen ausfüllen und das war's. Ich kann sie nicht dazu bringen, benutzerdefinierte Build-Skripte für mich zu schreiben. –

Antwort

1

Der beste Weg ist, eine Verzweigung zu verwenden. Sie sollten feststellen, dass ein Zweig stable, wenn er richtig ausgeführt wird, immer vorwärts bewegt werden sollte, ohne dass er umgestoßen/gedrückt wird. Wenn Sie eine neue Version erstellen, können Sie Ihre Zweigstelle stable auschecken und in Ihrer Zweigstelle develop zusammenführen. Und wann immer Sie Änderungen in neue Releases aktualisieren müssen, können Sie Commits/Merge Branches in den Zweig stable hinzufügen und dann Ihre develop-Verzweigung auschecken und in stable zusammenführen.

Schauen Sie sich here für ein häufig verwendetes Verzweigungsmodell an, das auf dieser Idee basiert. Sie sollten feststellen, dass der Zweig master in diesem Modell genau das ist, was Sie benötigen, um die neueste Version zu verfolgen.

Wenn Sie nicht zu einem Verzweigungsmodell wie diesem wechseln können, wäre es immer noch besser, Verzweigungen zu verwenden. Wenn Sie eine neue Version markieren möchten, checken Sie Ihr Repository auf den gewünschten Release-Commit aus und führen Sie git push -f origin release aus, was denselben Effekt hat wie das Löschen und erneute Erstellen der Verzweigung.

Tags sollen immer das gleiche Commit markieren, sobald sie erstellt wurden. Zweige sollen sich vorwärts bewegen.

+0

Danke, das scheint vernünftig. Ich kann Master wahrscheinlich nicht als stabilen Zweig benutzen, es scheint nicht gut mit Gerrit zu spielen (oder ich muss mehr von Gerrit lernen). Die zweite Option scheint jedoch einfach und unkompliziert. –

+0

@ n.m. Sie können beliebige Verzweigungsnamen verwenden, die die verschiedenen Zweige darstellen sollen. –

+0

Das Problem liegt in der Zusammenführung, unser Gerrit-Setup mag keine Fusion, nur Rebasieren. Ich denke, das kann problematisch sein, wenn Sie in beide Richtungen zusammenführen müssen. –