Ich wollte einen Protokollkommentar im Repository-Browser bearbeiten und erhielt eine Fehlermeldung, dass für das Repository kein pre-revprop-change-Hook existiert. Was ist ein "pre-revprop-change"-Haken, abgesehen von seinem unheimlichen Namen, und wie kann ich ihn erstellen?
Antworten
Zu viele Anzeigen?Der Name des Hook-Skripts ist nicht so beängstigend, wenn man ihn entziffern kann: Er lautet Haken für Eigenschaftsänderungen vor der Revision . Kurz gesagt, der Zweck der pre-revprop-change
Hook-Skript dient dazu, Änderungen von nicht versionierten (Revisions-)Eigenschaften zu kontrollieren und Benachrichtigungen zu senden (z.B. eine E-Mail zu senden, wenn eine Revisionseigenschaft geändert wurde).
Es gibt 2 Arten von Eigenschaften in Subversion:
- versionierte Eigenschaften (z.B.
svn:needs-lock
ysvn:mime-type
), die für Dateien und Verzeichnisse festgelegt werden können, - nicht versionierte (Revisions-)Eigenschaften (z. B.
svn:log
ysvn:date
), die im Repository eingestellt sind Überarbeitungen .
Versionierte Eigenschaften haben einen Verlauf und können von normalen Benutzern mit Lese-/Schreibzugriff auf ein Repository manipuliert werden. Nicht versionierte Eigenschaften hingegen haben keine Historie und dienen hauptsächlich der Wartung. Wenn Sie zum Beispiel eine Revision übertragen, wird sie sofort svn:date
mit der UTC-Zeit Ihrer Übertragung, svn:author
mit Ihrem Benutzernamen und svn:log
mit Ihrer Commit-Logmeldung (falls Sie eine angegeben haben).
Wie ich bereits dargelegt habe, ist der Zweck der pre-revprop-change
Hook-Skript dient der Kontrolle von Änderungen der Revisionseigenschaften. Sie wollen nicht, dass jeder, der Zugriff auf ein Repository hat, alle Revisionseigenschaften ändern kann, daher ist die Änderung von Revisionseigenschaften standardmäßig verboten. Um Benutzern das Ändern von Eigenschaften zu erlauben, müssen Sie ein pre-revprop-change
Haken.
Der einfachste Haken kann nur eine Zeile enthalten: exit 0
. Es erlaubt jedem authentifizierten Benutzer, jede Revisionseigenschaft zu ändern, und sollte nicht in einer realen Umgebung verwendet werden. Unter Windows können Sie ein Batch-Skript oder ein PowerShell-basiertes Skript verwenden, um eine bestimmte Logik innerhalb von pre-revprop-change
Haken.
Mit diesem PowerShell-Skript können Sie Folgendes ändern svn:log
Eigenschaft und verweigert leere Protokollmeldungen.
# Store hook arguments into variables with mnemonic names
$repos = $args[0]
$rev = $args[1]
$user = $args[2]
$propname = $args[3]
$action = $args[4]
# Only allow changes to svn:log. The author, date and other revision
# properties cannot be changed
if ($propname -ne "svn:log")
{
[Console]::Error.WriteLine("Only changes to 'svn:log' revision properties are allowed.")
exit 1
}
# Only allow modifications to svn:log (no addition/overwrite or deletion)
if ($action -ne "M")
{
[Console]::Error.WriteLine("Only modifications to 'svn:log' revision properties are allowed.")
exit 2
}
# Read from the standard input while the first non-white-space characters
$datalines = ($input | where {$_.trim() -ne ""})
if ($datalines.length -lt 25)
{
# Log message is empty. Show the error.
[Console]::Error.WriteLine("Empty 'svn:log' properties are not allowed.")
exit 3
}
exit 0
Dieses Batch-Skript erlaubt es nur dem Benutzer "svnmgr", Revisionseigenschaften zu ändern:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0
Wenn Sie die Änderungen in den Protokollmeldungen speichern möchten, verwenden Sie das Batch-Skript aus der obigen Antwort von @patmortech ( https://stackoverflow.com/a/468475 ),
der das Skript kopiert hat von https://stackoverflow.com/a/68850 ,
und fügen Sie diese Zeilen zwischen if "%bIsEmpty%" == "true" goto ERROR_EMPTY
y goto :eofbefore
:
set outputFile=%repos%\log-change-history.txt
echo User '%user%' changes log message in rev %rev% on %date% %time%.>>%outputFile%
echo ----- Old message: ----->>%outputFile%
svnlook propget --revprop %repos% svn:log -r %rev% >>%outputFile%
echo.>>%outputFile%
echo ----- New message: ----->>%outputFile%
for /f "tokens=*" %%g in ('find /V ""') do (echo %%g >>%outputFile%)
echo ---------->>%outputFile%
echo.>>%outputFile%
Es wird eine Textdatei erstellt log-change-history.txt
im Repo-Ordner auf dem Server und fügen Sie jede Protokolländerungsmeldung an.
- Gehen Sie in das SVN Repo Verzeichnis in den Unterordner "hooks", z.B. " D:\SVN\hooks\ "
- dort die leere Datei "pre-revprop-change.bat" erstellen
- in die Datei "exit 0" (ohne "") schreiben und speichern
- viel Spaß :)
(Diese Lösung hat sicherlich Nachteile, da nichts kontrolliert/verboten wird. Aber für meinen Fall - ein lokales Repo, das nur ich benutze - scheint es zu funktionieren).
Dies war für mich auf einem Windows-Server am einfachsten: Klicken Sie in VisualSVN mit der rechten Maustaste auf Ihr Projektarchiv und wählen Sie dann Eigenschaften... und dann die Häkchen tab.
Wählen Sie Haken für Eigenschaftsänderungen vor der Überarbeitung klicken. 編集 .
Ich musste in der Lage sein, den Autor zu ändern, da es bei Remote-Computern, die von mehreren Personen genutzt werden, häufig vorkommt, dass wir versehentlich mit den gespeicherten Anmeldedaten einer anderen Person einchecken.
Hier ist das geänderte Community-Wiki-Skript zum Einfügen:
@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5
:: Only allow the author to be changed, but not message ("svn:log"), etc.
if /I not "%propertyName%" == "svn:author" goto ERROR_PROPNAME
:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION
:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY
goto :eof
:ERROR_EMPTY
echo Empty svn:author messages are not allowed. >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo Only changes to svn:author messages are allowed. >&2
goto ERROR_EXIT
:ERROR_ACTION
echo Only modifications to svn:author revision properties are allowed. >&2
goto ERROR_EXIT
:ERROR_EXIT
exit /b 1
16 Stimmen
Jetzt ist dieser Link der zweite, gleich nach einem Link zu dieser Frage :)
0 Stimmen
Der Link über führt zu einem SEHR veralteten SVNBook 1.0. Die aktuelle ist 1.7 und 1.8 (nightly): svnbook.red-bean.com/de/1.8