自己在Windows上用VisualSVN搭了个服务器,默认提交代码是可以不填任何信息,这可不是我所期望的,于是找到了下面的解决方案:
在VisualSVN的管理控制台中可以设置这些规则,这些规则在特定的时机触发,其中Commit代码之前检查是否填写了log信息,我们可以在pre-commit时进行。
设置方法:
1、打开VisualSVN管理控制台
2、右键你要设置的代码仓库
3、所有任务-》Manage Hooks……
4、编辑“Pre-commit hook"
其实这个编辑对应的是在你的代码仓库目录下的Hook子目录生成了一个.cmd的文件,我们自己修改这个文件就可以了,不需要通过界面修改。
在hook目录有一些模板,但模板用的是linux的命令,把模板的后缀名修改成cmd并不能正确执行,所以我们需要符合Windows的Hook脚本,我测试了两个,一个是纯DOS命令,一个是需要perl,都测试OK,还有一个pytyon的版本我就没有测试了,具体可以参考我最后列出来的参考文档。
版本库生成后,hooks目录下就存在一些钩子脚本的模板,用户可以作为参考。
把pre-revprop-change.tmpl复制为pre-revprop-change.bat,再修改里面的脚本,钩子就设置好了。
包括以下功能:
1、只允许用户修改自己的日志。可以设置超级用户,超级用户可以修改其他人的日志,其他人只能修改自己的日志。
2、只允许对日志进行操作,不允许对其它属性操作。
3、只允许对日志进行修改,不允许增加、删除日志。
@ECHO OFF
REM 限制日志文件的个数采用修改项目属性的tsvn:logminsize,不在脚本中限制
REM 参数
set repos=%1
set rev=%2
set user=%3
set propname=%4
set action=%5
REM 设置超级用户,超级用户可以修改其他人的日志,其他人只能修改自己的日志
set superUser=zewoo
REM 只允许日志svn:log的修改
if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME
REM 只允许修改日志,增加、删除等操作不允许
if /I not '%action%'=='M' goto ERROR_ACTION
REM 只允许用户修改自己的日志
for /f "usebackq" %%k in (`"C:/Program Files/VisualSVN Server/bin/svnlook.exe" author %repos% -r %rev%`) do @set var=%%k
set rightUser=0
if "%3" == "%superUser%" set rightUser=1
if "%3" == "%var%" set rightUser=1
if %rightUser% == 0 goto ERROR_USER
goto :SUCCESS_EXIT
:ERROR_USER
echo 只允许用户修改自己的日志 >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo 只有日志信息能被修改 >&2
goto ERROR_EXIT
:ERROR_ACTION
echo 只允许修改日志,不允许增加、删除等操作 >&2
goto ERROR_EXIT
:ERROR_EXIT
exit 1
:SUCCESS_EXIT
exit 0