Кто-нибудь знает, как предотвратить коммиты в репозиторий кода Subversion, когда не введен комментарий коммита?Как я могу запретить Subversion совершать без комментариев?
ответ
Вы можете использовать крюк (положить его в <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/
+1, хотя, конечно, это не может заставить пользователей использовать содержательные комментарии. svn commit -m "foo" foo.h все равно будет работать. – Glen
Зачем стоит '> nul'? В чем его цель? – bahrep
@bahrep, перенаправление сообщений, см. Также: http://support.microsoft.com/kb/110930 – miku
Создайте крюк предварительной фиксации. Вот some instructions о том, как сделать это самостоятельно, или here - пример скрипта hook, который отклонит что-либо с сообщением фиксации короче 10 символов.
Отлично! Хорошо работает, мне просто нужно было изменить местоположение python и svnlook. – Nux
Ссылка на скрипт с образцом, который отклоняет что-либо более короткое, чем 10 символов, нарушается. – tgharold
этот ответ - это всего лишь «ссылка только». Не могли бы вы поместить содержимое примера крючка в ответ? – Liam
На самом деле, при создании хранилища 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.
Это работает для меня на Ubuntu с UberSVN. Хотя мне нужно указать SVNLOOK на '/ opt/ubersvn/bin/svnlook' –
Мне также нужно« sudo chmod 777 pre-commit », чтобы он работал; в противном случае всем коммитам отказано. –
@NamGiVU 777 не следует использовать легко, вам просто нужно было использовать 700 или 750 файлов, чтобы он работал, если владелец правильно настроен. – Shadok
Здесь предварительно совершить крюк с @ подробным сообщением об ошибке Мику для 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
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
Если вы используете TortoiseSVN только тогда, вы можете добавить свойство TortoiseSVN в корневой каталог: имя свойства: tsvn:logminsize
value: 1
Это отключит кнопку OK в окне фиксации TortoiseSVN, тогда сообщение будет пустым. Имейте в виду, что это свойство TortoiseSVN, которое может не работать с другим клиентом SVN.
Обратите внимание, что крючки могут предотвратить случайные ошибки без комментариев. Если вы не обучите своих пользователей, они просто совершают с чем-то вроде «исправить ошибку», что не имеет никакого преимущества над пустым сообщением. – Thilo
Я согласен с Тило. Если вы намерены предотвратить ошибки при совершении без комментариев, то предлагаемые здесь решения будут работать. Если вы хотите, чтобы это заставляло ваших пользователей предоставлять содержательные комментарии, заставляя их комментировать, они собираются писать «исправлять ошибки» и «новую функцию» во всех коммитах. Это проблема культуры. – GmonC
Согласен, это самое важное. – 2009-12-20 12:55:18