post commit hook, um eine Datei unter Version zu aktualisieren

8

Ich habe eine Datei namens version.ini erstellt, die unter Versionskontrolle steht (/trunk/version.ini) Ich wollte jetzt einen Post-Commit machen, um diese Datei mit der neuesten Version zu aktualisieren. Aber ich weiß nicht, welcher Befehl das kann. Ich weiß, dass ich diese Params habe:

%Vor%

Aber wie kann ich den Inhalt dieser Datei ersetzen, ohne eine neue Revision durchzuführen? und haben diese Änderungen immer noch in meinem Repo?

UPDATE: Da ich vielleicht nicht klar gewesen bin, werde ich eine detailliertere Erklärung versuchen: Sagen wir, ich habe dieses Repo: / Svn / Repos / Projekt / Stamm / und ich habe eine Datei namens version.ini, die unter Versionskontrolle ist. Was ich tun möchte ist, dass bei jedem Commit diese Datei auf die neue Revision aktualisiert wird. Lets sagen, dass die aktuelle Revision 263 ist, dass ich möchte, dass die Datei 263 darin geschrieben hat. Und um auf eine Antwort unten zu antworten, können Sie keine Schlüsselwörter verwenden, da sie nur funktionieren, wenn ich diese Datei aktualisiere und ich es nicht tun möchte.

Ich hoffe, ich habe Sinn und danke für jede Hilfe gegeben. Prost

    
Gabriel Solomon 16.03.2009, 12:16
quelle

2 Antworten

7

Was Sie eigentlich wollen, ist keine Möglichkeit, Ihre Commits zu modifizieren, sondern etwas wie svn: keywords . Leider können Sie in der Box "Wo ist $ GlobalRev $?" Nachlesen. das macht nicht wirklich was du willst. Stattdessen müssen Sie ein Skript schreiben, um die Ausgabe von svnversion aufzurufen und zu parsen und das Ergebnis als Teil des Builds in Ihre Dateien einfügen.

Nun, um Ihre Frage zu beantworten, macht es immer noch Spaß darüber nachzudenken, was Sie in svn hook-Skripten tun können und was nicht:

Sie können ein Commit nicht von einem Post-Commit-Hook ändern

Zu dem Zeitpunkt, an dem der Post-Commit-Hook ausgeführt wird, ist der Commit bereits abgeschlossen (wie der Name schon sagt), so dass das Ändern von Dateien nicht in Frage kommt. Sie können die Änderungen nur an dieser Stelle überprüfen.

Sie können ausstehende Commits von einem Pre-Commit-Hook entweder nicht ändern

Sie können den Inhalt einer ausstehenden Transaktion anhand eines Vorab-Hooks überprüfen, indem Sie die svnlook Werkzeug mit dem Schalter --transaction, aber Sie können es nicht ändern.

Wenn in einem Pre-Commit-Hook beliebige Änderungen vorgenommen werden könnten, müsste der Server diese Änderungen natürlich dem Svn-Client melden. Andernfalls würde der Client denken, dass sich seine Dateien bei der festgeschriebenen Revision befinden, während sie tatsächlich anders sind. Wenn der SVN-Client solche gemeldeten Änderungen akzeptieren würde, würde dies dazu führen, dass Ihre Arbeit durch einen Commit ausgelöscht wird. Das wäre ein überraschendes Feature für ein Versionskontrollsystem, um es milde auszudrücken. Subversion erlaubt das natürlich nicht.

    
Wim Coenen 17.03.2009, 00:02
quelle
5

Es gibt keine Möglichkeit, etwas im Repo zu ändern, ohne die Revisionsnummer zu ändern.

Die Lösung besteht darin, spezielle Keywords (sucht nach svn:keywords ) in die Datei einzufügen und SVN ersetzt sie beim Checkout. Es scheint, dass diese Werte aus dem Repository stammen, aber die Darstellung der Datei im Repository wird sich nicht ändern.

Sie suchen wahrscheinlich nach $ LastChangedRevision $ (oder kurz $ Rev $).

Eine weitere Lösung besteht darin, eine Regel zu Ihrem Build-Tool / Makefile / was auch immer zu verwenden, die svn info im Stammverzeichnis Ihres Projekts verwendet, um die aktuelle Revision zu ermitteln und in eine temporäre Datei zu schreiben ( nicht <) / em> Ihrem Repo hinzugefügt).

    
Aaron Digulla 16.03.2009 12:36
quelle

Tags und Links