How can I prevent Subversion commits without comments?
Solution 1
You can use a hook (put it into <repository>/hooks
and name it pre-commit.bat
(Windows)):
@echo off
::
:: Stops commits that have empty log messages.
::
setlocal
rem Subversion sends through the path to the repository and transaction id
set REPOS=%1
set TXN=%2
rem check for an empty log message
svnlook log %REPOS% -t %TXN% | findstr . > nul
if %errorlevel% gtr 0 (goto err) else exit 0
:err
echo. 1>&2
echo Your commit has been blocked because you didn't give any log message 1>&2
echo Please write a log message describing the purpose of your changes and 1>&2
echo then try committing again. -- Thank you 1>&2
exit 1
src: http://www.anujgakhar.com/2008/02/14/how-to-force-comments-on-svn-commit/
Solution 2
Here is a pre-commit hook with @miku's detailed error message for Linux:
#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
grep "[a-zA-Z0-9]" > /dev/null
GREP_STATUS=$?
if [ $GREP_STATUS -ne 0 ]
then
echo "Your commit has been blocked because you didn't give any log message" 1>&2
echo "Please write a log message describing the purpose of your changes and" 1>&2
echo "then try committing again. -- Thank you" 1>&2
exit 1
fi
exit 0
Solution 3
Actually, when you create a Subversion repository, its hooks
subdirectory already contains hook samples. Check out the one called pre-commit.tmpl
for details on the hook's parameters. It also contains an example for a hook that you're looking for:
#!/bin/sh
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/local/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
grep "[a-zA-Z0-9]" > /dev/null || exit 1
You can write your hook in any script or language, as long as it's executable on your Subversion machine.
Solution 4
If you are using TortoiseSVN only then you can add TortoiseSVN's property to the root directory:
property name: tsvn:logminsize
value: 1
This will disable OK button in TortoiseSVN commit window then Message is empty.
Please be aware that this property is TortoiseSVN specific it might not work with other SVN client.
Solution 5
Create a pre-commit hook. Here's some instructions on how to do so yourself, or here is an example hook script that will reject anything with a commit message shorter than 10 characters.
![Admin](/assets/logo_square_200-5d0d61d6853298bd2a4fe063103715b4daf2819fc21225efa21dfb93e61952ea.png)
Admin
Updated on August 22, 2020Comments
-
Admin almost 4 years
Does anybody know how to prevent commits to a Subversion code repository when there is no commit comment entered?
-
Glen over 14 years+1, though of course this can't force users to use meaningful comments. svn commit -m "foo" foo.h would still work.
-
Nam G VU almost 13 yearsThis works for me on Ubuntu with UberSVN. Though I need to point SVNLOOK to
/opt/ubersvn/bin/svnlook
-
Nam G VU almost 13 yearsI also have to
sudo chmod 777 pre-commit
to get it works; otherwise, all commits are refused. -
Nux over 12 yearsGreat! Works fine, I just had to change location of python and svnlook.
-
Shadok over 12 years@NamGiVU 777 should not be used lightly, you just had to use 700 or 750 on the file for it to work if the owner is correctly set.
-
Nam G VU over 12 yearsThanks @Shadok. Though I have no idea on
the owner is correct
. Would be nice if you can point out more -
Shadok over 12 years@NamGiVU You should take a day or two to read general documentation on linux because it seems you lack some basic skills (no offense), have a look here for a quick lesson on files onwership and permissions: code.google.com/edu/tools101/linux/ownership_permissions.html
-
tgharold over 11 yearsThe link to the sample hook script that rejects anything shorter then 10 characters is broken.
-
bahrep about 11 yearsWhat for is the ` > nul` part? What's the purpose of it?
-
Liam almost 10 yearsthis answer is all a bit "link only". Couldn't you put the contents of the hook example into the answer?
-
Arthur Wu over 5 yearsTips: Rename pre-commit.tmpl to pre-commit
-
vatsug almost 4 yearsExcellent, does this hook work client-side or serverside? Ideally, I would want this to work serverside to prevent everyone from commiting without commit message.