2008-09-30 7 views

Antwort

21

Ich wollte eine ähnliche Verfügbarkeit und fand $ Rev $ als ungenügend, weil es nur für eine Datei aktualisiert wurde, wenn die Revision dieser Datei geändert wurde (was bedeuten würde, dass sie sehr zeitgerecht editiert und committen müsste tun.) Stattdessen wollte ich etwas, das auf der Revisionsnummer des Repositorys basierte.

Für das Projekt, an dem ich gerade arbeite, habe ich ein Perl-Skript geschrieben, das svnversion -n aus dem obersten Verzeichnis meiner Arbeitskopie ausführt und die neuesten Revisionsinformationen in eine .h-Datei (ich vergleiche es tatsächlich mit eine gespeicherte Umkehrung in einer nicht versionierten Datei in meiner Arbeitskopie, so dass ich die aktuelle Revisionsinformation nicht bei jedem Kompilieren überschreibe, sondern ob Sie dies tun, liegt bei Ihnen.) Diese .h-Datei (oder eine Anzahl von Dateien, falls notwendig, abhängig von Ihrem Ansatz) wird sowohl in meinem Anwendungscode als auch in den Ressourcendateien referenziert, um die Informationen zu erhalten, die mir gefallen.

Dieses Skript wird als vorbereitender Schritt ausgeführt, sodass alles auf dem neuesten Stand ist, bevor der Build gestartet wird und die entsprechenden Dateien automatisch von Ihrem Build-Tool neu erstellt werden.

+9

TortoiseSVN hat ein kleines Hilfsdienstprogramm namens SubWCRev.exe, das die höchste festgeschriebene Revisionsnummer einer Arbeitskopie findet. – dummy

+0

Gut zu wissen! Mein Team benutzt TortoiseSVN sehr, daher wäre es wahrscheinlich gut gewesen, wenn ich die Skripte geschrieben hätte. Ich könnte in SubWCRev.exe irgendwann schauen - es wäre schön, die Abhängigkeit von der normalen Subversion-Distribution zu löschen ... – antik

+1

Ein Tipp für andere, die diese Idee umsetzen: Überlegen Sie, ob Ihr Skript eine neue Version nur dann ausschreiben soll, wenn Änderungen tatsächlich vorliegen wurde vor Ort gemacht; d.h. nur dann, wenn der von "svnversion" ausgegebene Wert ein "M" unter dem endgültigen Satz von Zeichen enthält. Dadurch können Sie Ihr Projekt nach einem Commit neu erstellen, ohne dass sich die Versionsnummer ändert. (Für eine Beschreibung des Formats seiner Ausgabe siehe [die 'svnversion'-Dokumentation] (http://svnbook.red-bean.com/en/1.7/svn.ref.svnversion.re.html).) –

3

Sie können SVN to embed it for you bekommen, wenn das das Problem lösen wird. Sehen Sie sich das $ Rev $ Keyword auf dieser Seite an.

+5

Leider gibt das $ Rev $ Schlüsselwort nur die letzte Revision, dass * die Datei, in der es angezeigt wird * geändert wurde. –

3

Werfen Sie einen Blick auf SVN Keyword Substitution here. Es gibt noch eine SO Frage here die ich über Google gefunden habe!

3

Die Lösung von antik ist die, die wir verwenden. Seien Sie vorsichtig bei der Verwendung von Umgebungsvariablen, die .h-Datei stellt sicher, dass Sie eine Abhängigkeit haben, die dazu führt, dass alle Dateien, die sie benötigen, neu kompiliert werden, wenn sich die SVN-Rev-Nummer ändert.

+0

Guter Punkt: Ich habe vergessen, dass das ein weiterer Vorteil in unserer Umgebung war. – antik

15

Wie wäre es mit SubWCRev das Befehlszeilenprogramm, das mit TortoiseSVN ausgeliefert wird. Sie erstellen eine Vorlagendatei mit Token wie $ WCREV $ $ WCDATE $ etc. Dann haben Sie einen Pre-Build-Schritt, der SubWCRev in Ihrer Vorlagendatei ausführt, um die eigentliche Quelldatei zu erstellen, die dem Compiler zugeführt wird.

Verwandte Themen