SVN-Commit-Nachricht rückwirkend ändern?

85

Ich möchte eine große Anzahl von SVN-Commit-Nachrichten in eine andere Struktur umschreiben, z. B. eine Kategorie voranstellen. Von:

"foo" now accepts "bar" format for connection string.

Ich will

core - database - "foo" now accepts "bar" format for connection string.

Gibt es eine einfache Möglichkeit, dies zu tun, ohne das gesamte Repository mit zu sichern svndumpfilter?

Ich arbeite mit TortoiseSVN auf Client-Seite und VisualSVN auf Server-Seite. (VisualSVN ist ein Wrapper um den Klassiker svn, mit dem ich auch über die Befehlszeile sprechen kann.)

Pekka
quelle

Antworten:

98

Ja, Commit-Nachrichten können geändert werden. Sie werden als Eigenschaften bei Revisionen implementiert, ähnlich wie die regulären Dateieigenschaften.

Im TortoiseSVN-Protokollfenster können Sie mit der rechten Maustaste auf ein Commit klicken und "Protokollnachricht bearbeiten" auswählen.

JesperE
quelle
+1 Danke dafür. Ich habe einige Arbeiten mit einigen API-Änderungen durchgeführt, die ich separat für den Rest festschreiben wollte, und ich habe die Protokollnachricht geschrieben, um dies widerzuspiegeln ... bevor ich versehentlich das gesamte Los festgeschrieben habe. Ich habe es "behoben", indem ich eine Whitespace-Änderung mit einer Protokollnachricht vorgenommen habe, die den Rest erklärte! Nächstes Mal werde ich wissen, was zu tun ist.
Ed Daniel
1
Ich habe dies ebenfalls mit +1 bewertet, aber dann funktionierte es nicht mit der Meldung "Repository wurde nicht aktiviert, um Revisionsänderungen zu akzeptieren. Bitten Sie den Administrator, einen Pre-Revprop-Change-Hook zu erstellen." Weiß der Administrator automatisch, was zu tun ist?
J. Merrill
19
Fragen Sie mich, ob Sie einen kompetenten Subversion-Administrator haben? :)
JesperE
@ J.Merrill Sie müssen zu dem hooksOrdner am Speicherort des Repositorys navigieren und ihn in umbenennen pre-revprop-change.tmpl, pre-revprop-change.batdamit er funktioniert.
sa_leinad
59

Sie können Protokollnachrichten natürlich rückwirkend ändern, dies wird in den FAQ behandelt . Ich bin nicht sicher, wie die Befehlszeilenschnittstelle für VisualSVN funktioniert, aber für Vanilla SVN wäre der Befehl

svn propset -r N --revprop svn:log "new log message" URL

Wenn Sie dies für alle Revisionen tun möchten, ohne das Repository zu sichern und neu zu laden, können Sie diesen Befehl per Skript ausführen, um eine Liste aller Revisionen zu bearbeiten. Abhängig von der Größe Ihres Repositorys würde dies einige Zeit in Anspruch nehmen. Im Prinzip gibt es jedoch keinen Grund, warum Sie dies nicht tun können, und es ist kein Speicherauszug und kein erneutes Laden erforderlich.

Außerdem verfügt Vanilla SVN über einen Befehl, svnlookder eine Art Verwaltungstool darstellt, das direkt mit den Repository-Dateien zusammenarbeitet. Dieses Tool versteht keine URLs (Sie müssen Zugriff auf das Repository auf Dateisystemebene haben), ist jedoch viel schneller. Die Syntax ist etwas anders, aber Sie können Eigenschaften mit diesem Tool auf die gleiche Weise ändern.

Adam Bellaire
quelle
3
Danke @kazark, ich musste tun svn propedit -r N --revprop svn:log, um die Nachricht in meinem Editor ändern zu können.
TutuDajuju
3
Nur um einen Hinweis hinzuzufügen: Standardmäßig funktioniert dieser Befehl nicht, da Änderungen an den Revisionseigenschaften standardmäßig nicht zulässig sind. Um dies zuzulassen, muss der SVN-Administrator einen Hook namens "Pre-Revprop-Change" erstellen . Diese Informationen finden Sie in den oben genannten FAQ .
Matthias
Unter Windows müssen Sie die Umgebungsvariable "SVN_EDITOR", "VISUAL" oder "EDITOR" festlegen, bevor Sie den Befehl ausführen. Zum Beispiel:set SVN_EDITOR=notepad.exe
Enwired
26

Ja, das können Sie, aber Sie müssen es zuerst im Repository aktivieren.

Im Repository befindet sich im Hooks-Verzeichnis eine Datei mit dem Namen pre-revprop-change.tmpl. Es enthält einige Seiten mit Kommentaren zu den Funktionen und ist so eingerichtet, dass nur Änderungen an den Protokolleigenschaften zulässig sind. Um es zu aktivieren, benennen Sie die Datei in pre-revprop-change um und machen Sie sie ausführbar (ich gehe von einer von POSIX gehosteten Subversion aus. Wenn Sie Windows zum Hosten verwenden, ist diese Meldung möglicherweise hilfreich).

Sobald das Repository dies zulässt, können Sie mit Tortoise die Protokollnachricht für ein Commit über das Kontextmenü eines Commits ändern oder die Befehlszeile verwenden.

Andrew Aylett
quelle
+1 Ausgezeichnete Informationen, Sir. Ich kann es nicht ohne einen Pre-Revprop-Change-Hook machen. Ich muss das Template-Bash-Skript auf Windows portieren, aber das sollte kein Problem sein.
Pekka
Ich habe einen Link zu einem Beispielbefehlsskript hinzugefügt: svn.haxx.se/users/archive-2006-03/0107.shtml
Andrew Aylett
7

Verwendung svn propsetauf dem svn:logGrundstück. Beispiele im SVN-Buch .

Josh Lee
quelle
2

svn propedit -r N --revprop svn:log URL

URLoben ist optional, wenn Sie sich bereits in einem Arbeitsverzeichnis befinden. Daraufhin wird ein Editor angezeigt, damit die Nachricht geändert werden kann.

Raffi Khatchadourian
quelle
1

Ich bin gerade auf diesen Beitrag mit dem genauen Problem gestoßen, mit Toroise SVN für Client und VisualSVN auf einem Windows-Server.

Wenn die Fehlermeldung "Eine DAV-Anforderung ist fehlgeschlagen" angezeigt wird, sehen Sie sich die Antwort von Andrew Aylett an und bearbeiten Sie "pre-revprop-change.tmpl" in Ihrem Repository-Hooks-Unterverzeichnis.

Sobald dies erledigt ist, sollte das Klicken auf "Protokollnachricht bearbeiten" im Kontextmenü endlich funktionieren!

Julien B.
quelle