Can I go back and edit comments on an SVN checkin?
I put a mistake into a comment in SVN. Can I edit this after checkin?
Solution 1:
Commit messages are "unversioned properties" and can be changed with the svn propset command, for example
$ svn propset --revprop -r 25 svn:log "Journaled about trip to New York."
property 'svn:log' set on repository revision '25'
This is setting the revision property called "svn:log" on revision 25
Configuring subversion to allow revision property changes
Because these are unversioned, a default installation of subversion won't let you modify these properties unless you provide a pre-revprop-change hook script.
Here's a typical script, from /var/lib/svn/hooks/pre-revprop-change on my system:
#!/bin/sh
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then
echo "$1 $2 $3 $4 $5" >> /var/lib/svn/logchanges.log
exit 0;
fi
echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1
This logs changes to svn:log revision properties, and allows the edit by using exit 0, any other revision property change is denied by using exit 1. See patmortech's answer for a Windows equivalent.
Solution 2:
To enable the revision property modification, you need to create a pre-revprop-change hook script. Can read about it here: http://svnbook.red-bean.com/en/1.0/ch05s02.html (look for Hook Scripts section).
For Windows, here's a link to an example batch file that only allows changes to the log message (not other properties): http://ayria.livejournal.com/33438.html. Basically copy the code below into a text file and name it pre-revprop-change.bat and save it in the /hooks subdirectory for your repository.
@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 log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" 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:log messages are not allowed. >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT
:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT
:ERROR_EXIT
exit /b 1
Solution 3:
A way to do a quick change to the log message without having to create a pre-revprop-change hook script is to use the following svnadmin
command:
svnadmin setlog --bypass-hooks REPOS_PATH -r N FILE
where REPOS_PATH
is the path to the repository on the server (e.g. /srv/svn/repository) and N
is the revision number (e.g. 25) and FILE is a text file containing the correct commit log entry.
Two things: This requires filesystem access to the repository files, but so does creating a pre-revprop-change hook script... and secondly, this command will bypass any hook scripts that may be in place, so use advisedly...