34

我似乎对此一无所获。要么在网上搜索脚本等。任何人都有一个脚本,你可以在 Windows 环境中编辑开箱即用的 pre-commit.tmpl,需要输入 x 字符才能评论 Tortoise Subversion 中的提交全局,以便团队中的所有成员都需要,而此要求从 SVN 服务器下推到客户端?

我不知道脚本语言,这应该是非常简单的事情,无需我花时间在接下来的 3 小时内弄清楚脚本。

4

5 回答 5

57

这是一个需要注释的 .bat 文件。它检查评论中是否存在至少一个字符。

 @echo off  
 :: Stops commits that have empty log messages.        
 @echo off  

 setlocal  

 rem Subversion sends through the path to the repository and transaction id  
 set REPOS=%1  
 set TXN=%2           

 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 enter a comment. 1>&2  
 echo Write a log message describing the changes made and try again. 1>&2
 echo Thanks 1>&2
 exit 1

该文件位于存储库的 /hooks 文件夹中,名为 pre-commit.bat。如果您需要最少数量的字符,则要修改的行是

svnlook log %REPOS% -t %TXN% | findstr . > nul

因此,如果您想要至少 10 个字符,则需要 10 个 . 而不仅仅是一个

svnlook log %REPOS% -t %TXN% | findstr .......... > nul

findstr 命令的更高级选项将让您进行更高级的检查(某些字符集等)

于 2009-05-15T15:20:53.733 回答
2

我使用SubversionNotify,它可能比您需要的更多,但设置起来非常简单。

于 2009-05-15T15:43:18.500 回答
2

我有一个预提交钩子,可以完全按照您的意愿行事。再加上很多。

  • 您可以指定提交评论的最小长度。
  • 您可以将提交注释与正则表达式进行匹配。不仅可以指定长度,还可以指定某些参数。例如,提交注释是否包含缺陷跟踪系统使用的错误编号,以便您可以将更改追溯到特定缺陷?

它还允许您执行以下操作:

  • 针对特定文件或目录设置各种提交权限:
    • 读写:用户可以签出和提交这些项目。
    • 只读:用户可以签出此项目,但不能提交更改。
    • add-only:用户可以通过添加目录svn cp,但不能提交任何更改。/tags这对于允许您制作标签但不能修改标签的目录来说是完美的。
    • no-delete:用户可以提交更改并添加新文件,但不能删除这些文件。
    • no-add:用户只能提交更改,不能在提交中添加或删除文件。

而且,它还允许您这样做:

  • 通过globbing的正则表达式禁止某些文件名,
  • 要求某些文件或目录具有将特定属性设置为特定值的特定属性。对于确保 Unix shell 脚本、Unix Makefile 和 Windows 批处理文件具有正确的行结尾或svn:ignore已设置等事情非常有用,因此用户不会意外提交不应提交的文件。
  • 要求使用某些值设置某些修订属性。这是您检查提交消息的方式,但svn:log必须与某些正则表达式匹配。

这个预提交脚本是用 Perl 编写的。默认情况下,Perl 带有 Unix、Mac 和 Linux 服务器。不幸的是,它不包含在 Windows 计算机上。幸运的是,有几个开源、免费且易于安装 PC 的 Perl 包,例如ActivePerlStrawberry Perl

于 2012-12-11T12:41:49.530 回答
2

在 Windows 上,您可以使用VisualSVNServerHooks.exe check-logmessageVisualSVN Server 附带的预提交挂钩,该挂钩位于%VISUALSVN_SERVER%bin目录中。这个简单的工具将帮助您定义日志消息中允许的最小字符数。

有关说明,请参阅文章KB140:验证 VisualSVN 服务器中的提交日志消息。

于 2018-09-13T15:56:18.150 回答
0

试试这个 :

rem Make sure that the log message contains some text.
set REPOS=%1
set TXN=%2

"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% | FindStr [a-zA-Z0-9]  
IF %ERRORLEVEL% EQU 0 GOTO OK  
echo Your commit has been blocked because you didn't provide a 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  

:OK  
rem -------------------------------------------------------------  
rem Check if comment is in list of reserved words to not be used..  
rem -------------------------------------------------------------  

"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% >comment  
setlocal enabledelayedexpansion  
Set SEPARATOR=  
set COMMENT=  
for /f "delims=" %%a in (comment) do (      
    set currentline=%%a  
    set COMMENT=!COMMENT!%SEPARATOR%!currentline!  
)  

FIND "%COMMENT%" "C:\Program Files\Subversion\excludedwords.txt">Null  
If %ERRORLEVEL% EQU 1 goto OK2  

:Fail  
echo Your commit has been blocked because the single word comment you provided is not allowed 1>&2  
echo Line is -%COMMENT%- 1>&2  
echo Please write a proper log message describing the purpose of your changes and 1>&2  
echo then try committing again. -- Thank you 1>&2   
exit 1  


:OK2  
rem -------------------------------------------------------------  
rem Check number of words on the line if = 2 then reject comment  
rem -------------------------------------------------------------  
Set VAR1=%COMMENT%  
Set count=0  
For %%j in (%VAR1%) Do Set /A count+=1  
IF %count% EQU 2 goto Fail2  
goto OK3  

:Fail2  
echo Your commit has been blocked because not enough detail supplied 1>&2  
echo Please write a longer log message describing the purpose of your changes and 1>&2  
echo then try committing again. -- Thank you 1>&2   
exit 1  

:OK3  
rem -------------------------------------------------------------  
rem Check that the author of this commit has the rights to perform  
rem -------------------------------------------------------------  
rem the commit on the files and directories being modified.  
rem commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1  

rem All checks passed, so allow the commit.  
exit 0  
于 2009-12-04T14:42:30.800 回答