Ein Kollege und ich haben abwechselnd die Probleme und Vorzüge der Integration einer aus dem aktuellen Git-Repository abgeleiteten Version in unseren Code diskutiert.
Wir denken, die Vorzüge sind:
- Sie müssen sich beim Aktualisieren einer Versionsnummer keine Gedanken über menschliche Fehler machen
- Rückverfolgbarkeit zwischen dem, was wir in einem Gerät finden, und dem Quellcode, von dem es abgeleitet wurde
Folgende Probleme sind (für uns) aufgetreten:
- Von IDE abgeleitete Build-Systeme (z. B. MPLABX) können es schwierig machen, herauszufinden, wo diese Art von Hooks eingesetzt werden können (und es kann am Ende ziemlich kitschig werden)
- Mehr Arbeit, um dies tatsächlich in die Build-Skripte / Makefiles zu integrieren
- Die Kopplung an einen bestimmten Build-Ansatz (z. B. wenn eine Person mit XCode und die andere mit MPLABX erstellt) kann nachgelagerte Überraschungen verursachen
Wir sind also gespannt, wo andere in dieser Debatte gelandet sind. Es ist wirklich leicht für die Diskussion, anekdotisch zu werden. Es gibt viele Leute da draußen, die auf End-to-End-Automatisierung bestehen, die Menge an Vorarbeit und die damit verbundene Kopplung aufhängen. Und es gibt viele andere auf der anderen Seite der Debatte, die einfach das Einfachste tun, was funktioniert und mit den Risiken leben.
Gibt es eine begründete Antwort auf die Frage, auf welcher Seite man am besten landen kann?
quelle
it describe
(letzter Teil des Strings) nicht cset-id von tag ist, sondern hash von changeset, für das wir eine Beschreibung erhalten . In lesbarer Formv1.1.2-6-a3b27gae
wird "Sechs Änderungssätze nach Änderungssatz, markiert als v1.1.2-6, hat kurze Änderungssatz-Hash a3b27gae"git checkout v1.1.2
das Commit für das Tag einfach oder auflisten könnengit rev-list v1.1.2 | head -n 1
.Wir waren früher ein SVN-Shop, also war diese Berechnung einfach - die Build-Nummer war die SVN-Version und das war's. Wir haben versucht, dies aufrechtzuerhalten, als wir zu DCVSes gewechselt sind und festgestellt haben, dass dies aus mehreren Gründen fehlgeschlagen ist.
Erstens, wer weiß, ob Rev. 69bc333bc8d8 vor, nach oder gleichzeitig mit Rev. 25b0f0d1052c ist? Im Vergleich zum SVN-System gibt es sehr wenig Kontext, wenn Sie zumindest wussten, dass 101 nach 100 war. Zweitens macht die DCVS-Quellcodeverwaltung die Dinge in vielerlei Hinsicht nicht linear, wenn nachfolgende Builds möglicherweise nicht denselben Ball vorwärts bringen.
Wir haben uns schließlich dazu entschlossen, einen Build-Server zu verwenden, um Build-Nummern auf Dinge zu verteilen, da dieser die richtige Sichtbarkeit und Fähigkeit hatte, damit umzugehen.
quelle
Ich verwende das folgende Schema für ein visuelles Studio-Build-System einer C # -DLL, um automatisch Versionsnummern zu generieren (Wir hatten in der Vergangenheit Probleme mit nicht ordnungsgemäß durchgeführten Bereitstellungen, sodass eine saubere Methode zur Gewährleistung der Bereitstellung der richtigen Version erforderlich war).
Beachten Sie, dass dies voraussetzt, dass Sie 2 fungible 16-Bit-Zahlen ohne Vorzeichen zum Spielen haben. Es könnte auch ein äquivalentes System geschaffen werden, das kleinere Zahlen verwendet.
Beachten Sie auch, dass nicht numerische Felder hilfreich sein können, wenn Sie sie als Metadaten anhängen können. Fügen Sie beispielsweise die Git-Versionsnummer als Informationsversionsnummer hinzu.
quelle
Ich verbinde direkt die Ausgabe von Git Status, Log und Diff in die ausführbare Datei. Dann gibt es eine Option zum Drucken. Der Vorteil ist, dass Sie nicht nur herausfinden können, aus welchem Zweig Ihre Binärdatei erstellt wurde, sondern auch, welche nicht festgeschriebenen Quellcodeänderungen enthalten sind. Bitte sehen Sie:
https://github.com/colding/MercuryFIX/tree/master/stdlib/scm_state
Sie sollten in der Lage sein, diese 3 Dateien zu verwenden, um Ihre eigene SCM-Statusbibliothek zu erstellen.
quelle
Ich würde die Verwendung von Autorevision empfehlen .
Sie können Ausgaben in verschiedenen Formaten erhalten, z. B. als C-Header .
Es gibt auch ein paar Beispiele (im Contributions-Verzeichnis), wie Sie die Dinge so anschließen können, dass unabhängig davon, wer sie erstellt und wie sie es tun, sie immer die gleichen Versionsinformationen erhalten, auch wenn sie aus einem Tarball erstellt werden.
Außerdem, da zusätzlich zu
git
Autorevision mitsvn
undhg
es einfacher macht, von svn wegzuschalten, ohne zu viel ändern zu müssen, sobald Sie es eingerichtet haben.quelle
<VCS_TAG>-<VCS_SHORT_HASH>
,<VCS_TAG>-<VCS_TICK>
oder sogar<VCS_ACTION_STAMP>
sollte alles funktionieren. Wenn Sie eine vollständige Liste der Symbole wünschen, empfehle ich Ihnen, die Manpage zu lesen .