2009-03-16 3 views
8
zu aktualisieren

Ich habe eine Datei namens version.ini, die unter Versionskontrolle (/trunk/version.ini) ist Ich wollte jetzt einen Post-Commit Hook, um diese Datei mit der Aktualisierung zu machen letzte Version. Aber ich weiß nicht, welcher Befehl das tun kann. Ich weiß, dass ich diese params:post commit hook, um eine Datei unter Version

#!/bin/sh 

REPOS = "$1" 
REV = "$2" 

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

UPDATE: Da ich vielleicht klar havent ich werde ein detaillierteres explination versuchen: Lets sagen, dass ich dieses Repo haben:/svn/repos/Projekt/trunk/und darin habe ich eine Datei version.ini dass genannt ist unter Versionskontrolle. 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 will es nicht tun.

Ich hoffe, ich machte Sinn, und danke für jede Hilfe gegeben. Cheers

+0

Sie Frage ist nicht klar. Die Haken sind, etwas serverseitig zu tun. Aktualisieren einer Datei im Repository ist Aktion von Client zu Server. –

Antwort

7

Was Sie eigentlich wollen, ist nicht eine Möglichkeit, Ihre Commits zu ändern, aber so 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 irgendwie als Teil des Builds in Ihre Dateien zu schreiben.

nun Ihre wörtliche Frage zu beantworten Spaß es ist immer noch darüber nachdenken, was Sie können und in svn Hook-Scripts nicht tun können:

Sie können keine von einem Commit ändern post-commit Haken

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

Sie können nicht ändern Commits von einem pre-commit Haken anhängig entweder

Sie können den Inhalt einer anstehenden Transaktion von einem untersuchen pre-commit Haken unter Verwendung des svnlook Werkzeug mit dem --transaction Schalter aber du kannst es nicht ändern.

Wenn beliebige Änderungen in einem Pre-Commit-Hook 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 akzeptiert, 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. Unnötig zu sagen, Subversion erlaubt dies nicht.

5

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

Die Lösung ist special keywords (Suche nach svn:keywords) in die Datei und SVN ersetzen 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 $ Rev $ für kurz).

Eine andere Lösung ist es, eine Regel zu Ihrem Build-Tool zum Hinzufügen/Makefile/was auch immer, die svn info im Stammverzeichnis Ihres Projekts verwendet die aktuelle Version zu bestimmen, und setzt das in eine temporäre Datei (das ist nicht hinzugefügt, um Ihre Repo).

+0

nicht zur Arbeit gehen ... da ich diese Datei ändern muss, um die Schlüsselwörter ersetzt zu haben –

+0

SVN wird das für Sie tun, wenn svn: keywords korrekt eingestellt ist. –

+0

Es ist wie ein Filter, mit dem Sie Dinge im Repository sehen können, die nicht wirklich da sind. –

Verwandte Themen