SVN Server 可通过 hook 的方式来自定义 SVN 的行为控制,下面列几个常用场景。

1. 限制单个提交文件大小不超过 100MB

在 Pre-commit hook 中加入以下批处理脚本:

Pre-commit hook

@echo off
setlocal enabledelayedexpansion
set REPOS=%1
set TXN=%2
rem MAX_SIZE value is byte
set MAX_SIZE=104857600
for /f "delims=" %%a in ('svnlook changed -t %TXN% %REPOS%') do (
set var=%%a
for /f %%i in ('svnlook filesize -t %TXN% %REPOS% !var:~4!') do (
if %%i gtr %MAX_SIZE% (
set /a size=%%i/1024
echo file size upto limit 100MB. File: !var:~4! Size: !size!KB 1>&2
exit 1
)
)
)
exit 0

2. 允许修改提交记录

在 Pre-revision property change hook 中加入以下脚本:

Pre-revision property change hook

SET REPOS="%1"
SET REV="%2"
SET USER="%3"
SET PROPNAME="%4"
SET ACTION="%5"
IF %ACTION% == "M" (IF %PROPNAME% == "svn:log" (EXIT 0))
ECHO "Changing revision properties %PROPNAME% is prohibited" >&2
EXIT 1

以上脚本均为批处理格式(.sh / .bat),不同操作系统下 hook 的脚本语法会有所不同。