2009-12-18 4 views
60

Кто-нибудь знает, как предотвратить коммиты в репозиторий кода Subversion, когда не введен комментарий коммита?Как я могу запретить Subversion совершать без комментариев?

+13

Обратите внимание, что крючки могут предотвратить случайные ошибки без комментариев. Если вы не обучите своих пользователей, они просто совершают с чем-то вроде «исправить ошибку», что не имеет никакого преимущества над пустым сообщением. – Thilo

+1

Я согласен с Тило. Если вы намерены предотвратить ошибки при совершении без комментариев, то предлагаемые здесь решения будут работать. Если вы хотите, чтобы это заставляло ваших пользователей предоставлять содержательные комментарии, заставляя их комментировать, они собираются писать «исправлять ошибки» и «новую функцию» во всех коммитах. Это проблема культуры. – GmonC

+1

Согласен, это самое важное. – 2009-12-20 12:55:18

ответ

57

Вы можете использовать крюк (положить его в <repository>/hooks и назовите его 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 

ЦСИ: http://www.anujgakhar.com/2008/02/14/how-to-force-comments-on-svn-commit/

+5

+1, хотя, конечно, это не может заставить пользователей использовать содержательные комментарии. svn commit -m "foo" foo.h все равно будет работать. – Glen

+0

Зачем стоит '> nul'? В чем его цель? – bahrep

+0

@bahrep, перенаправление сообщений, см. Также: http://support.microsoft.com/kb/110930 – miku

6

Создайте крюк предварительной фиксации. Вот some instructions о том, как сделать это самостоятельно, или here - пример скрипта hook, который отклонит что-либо с сообщением фиксации короче 10 символов.

+1

Отлично! Хорошо работает, мне просто нужно было изменить местоположение python и svnlook. – Nux

+1

Ссылка на скрипт с образцом, который отклоняет что-либо более короткое, чем 10 символов, нарушается. – tgharold

+2

этот ответ - это всего лишь «ссылка только». Не могли бы вы поместить содержимое примера крючка в ответ? – Liam

17

На самом деле, при создании хранилища Subversion, его подкаталог hooks уже содержит образцы крючков. Для получения подробной информации о параметрах крюка, зайдите на страницу, называемую pre-commit.tmpl. Он также содержит пример для крючка, что вы ищете:

#!/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 

Вы можете написать свой крючок в любом скрипте или языке, если это исполняемый файл на вашем компьютере Subversion.

+0

Это работает для меня на Ubuntu с UberSVN. Хотя мне нужно указать SVNLOOK на '/ opt/ubersvn/bin/svnlook' –

+0

Мне также нужно« sudo chmod 777 pre-commit », чтобы он работал; в противном случае всем коммитам отказано. –

+2

@NamGiVU 777 не следует использовать легко, вам просто нужно было использовать 700 или 750 файлов, чтобы он работал, если владелец правильно настроен. – Shadok

18

Здесь предварительно совершить крюк с @ подробным сообщением об ошибке Мику для 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 
5

Linux скрипт для более чем 15 characters--

#!/bin/bash 
REPOS="$1" 
TXN="$2" 
# Make sure that the log message contains some text. 
SVNLOOK=/usr/bin/svnlook 
# Comments should have more than 5 characters 
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep [a-zA-Z0-9] | wc -c) 
if [ "$LOGMSG" -lt 15 ]; 
then 
echo -e "Please provide a meaningful comment when committing changes." 1>&2 
exit 1 
fi 

Source- http://java.dzone.com/articles/useful-subversion-pre-commit

5

Если вы используете TortoiseSVN только тогда, вы можете добавить свойство TortoiseSVN в корневой каталог: имя свойства: tsvn:logminsize value: 1 Это отключит кнопку OK в окне фиксации TortoiseSVN, тогда сообщение будет пустым. Имейте в виду, что это свойство TortoiseSVN, которое может не работать с другим клиентом SVN.