2009-07-09 7 views
1

Ich verwende Visual SVN auf meiner Windows-Box.Verwenden von Svnversion mit SVN: Schlüsselwörter

Ich habe Repository Application, die Framework als svn: extern hat. Alles gut und gut.

Wenn ich einen Checkout von Application mache, möchte ich die Version von Application und Framework für die Aufnahme in einer Fußzeilendatei haben. So kann ich so etwas wie haben könnte:

Application Version $ApplicationVersion$, Framework Version $FrameworkVersion$ 

Normalerweise verstehe ich, ich könnte svn: keywords und die Revision hinzuzufügen - aber wie ich es verstehe, svn: keywords gelten auf einer Pro-Datei-Basis. Einige Seiten haben vorgeschlagen, svnversion zu verwenden, um die Ausgabe für jede Variable zu erzeugen, aber ich bin nicht ganz sicher, wie man das macht.

Noch einmal, in einer Windows-Box, mit VisualSVN. Ich entwickle auch auf einem Mac mit Versions.app, wenn es eine vertrautere Schnittstelle für Leute bietet, um zu antworten :)

Edit - meine Anwendung ist eine PHP-Webanwendung. Daher gibt es kein Kompilieren.

Danke!

Antwort

4

Um Svnversion zu verwenden, müssen Sie es in den Build-Prozess integrieren. Wenn Sie es bei einem Subversion-Checkout ausführen, gibt es eine Zeichenfolge wie 73597:73598 aus, die angibt, welche Version Ihr Baum hat (beachten Sie, dass verschiedene Dateien unterschiedliche Versionen haben können, plus Dateien können auch lokale Änderungen enthalten). Sie stellen so etwas wie

CFLAGS+=-DSVNVERSION="\"`svnversion`\"" 

in Ihrem Makefile, und setzen dann

#define VERSION_STRING "Application version" SVNVERSION ", Framework version" FRAMEWORK_VERSION 

in den Code. Wenn Sie Make nicht verwenden oder den Build-Prozess nicht ohne Weiteres einen Befehl ausführen lassen, dessen Ausgabe eine Compiler-Befehlszeilenoption erzeugt, können Sie auch das Dienstprogramm subwcrev verwenden, das mit TortoiseSVN ausgeliefert wird. Sie verwenden das als einen Pre-Build-Schritt und lassen eine Datei mit Platzhaltern in eine Kopie der Datei transformieren, wobei die Platzhalter durch die aktuelle Version ersetzt werden. Anschließend kompiliert und verknüpft die Kompilierung die neue Datei.

bearbeiten: Für den PHP Fall ist es nicht möglich ist, die Revision automatisch in eine Datei auf der Kasse oder Update geschrieben zu haben. Stattdessen könnten Sie svnversion bei jedem PHP-Zugriff ausführen und die Ausgabe in die HTML-Antwort einfügen. Wenn das zu teuer wird, können Sie das svnversion-Ergebnis in einer Datei zwischenspeichern und die Datei nur neu generieren, wenn sie älter als eine Stunde ist. Der Benutzer muss also daran denken, die Datei nach einem Update zu löschen, damit sie neu berechnet wird der Cache sofort.

+0

Meine Anwendung ist eine PHP-Webanwendung. Daher kein Kompilieren. Wenn ich etwas wie subwcrev verwenden würde, wie kann ich es automatisch ausführen lassen, wenn es ausgecheckt ist? – EvilChookie

+0

Ich konnte keine akzeptable Lösung finden. Entweder passen die Lösungen nicht zu meiner Situation (mein Svn-Server ist nur eine Windows-Box, die VisualSVN hostet), oder die Optionen sind viel zu komplex, um sie für eine einfache Operation zu implementieren. – EvilChookie

+0

Die Tatsache, dass Sie einen VisualSVN-Server verwenden, ist hier wirklich irrelevant. Svnversion ist nur ein clientseitiges Tool und interagiert überhaupt nicht mit dem Server. Können Sie (oder subwcrev) Versionsinformationen ausgeben, wenn Sie sie manuell in der Befehlszeile aufrufen? –