SVN日志记录配置主要分为两类:强制提交时写日志(预防空日志)和允许修改已提交日志(修正日志内容)。以下是具体配置步骤:
通过TortoiseSVN的属性设置,限制提交日志的最小长度,适用于团队统一使用TortoiseSVN的场景。
步骤:
5,表示日志至少需要5个字符),点击「OK」保存。通过服务器端的pre-commit钩子脚本,在提交前检查日志内容,阻止不符合要求的提交,是企业级统一管理的推荐方式。
步骤:
hooks目录(路径如/path/to/repo/hooks/(Linux)或C:\Repositories\repo\hooks\(Windows))。pre-commit.tmpl模板文件复制并重命名为pre-commit(Linux需赋予执行权限:chmod +x pre-commit)。pre-commit文件,添加日志检查逻辑:
#!/bin/sh
REPOS="$1" # 仓库路径
TXN="$2" # 提交事务ID
SVNLOOK="/usr/bin/svnlook" # svnlook命令路径(需根据实际安装路径调整)
# 检查日志是否包含至少一个字母或数字(长度≥1)
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c)
if [ "$LOGMSG" -lt 5 ]; then # 要求日志至少5个字符
echo -e "\n错误:必须填写日志,简要描述修改内容,至少5个字符。" 1>&2
exit 1 # 阻止提交
fi
exit 0 # 允许提交
@echo off
setlocal
set REPOS=%1
set TXN=%2
set SVNLOOK="C:\Program Files\VisualSVN Server\bin\svnlook.exe" # svnlook路径(需根据实际安装路径调整)
# 检查日志是否为空(至少10个字符)
%SVNLOOK% log "%REPOS%" -t "%TXN%" | findstr ".........." > nul
if %errorlevel% gtr 0 goto err
exit 0
:err
echo 提交必须写10个字以上的日志!>&2
exit 1
SVN默认不允许修改已提交的日志(防止日志被篡改),但通过pre-revprop-change钩子可以放宽限制。以下配置实现“仅允许修改日志(svn:log),且普通用户只能修改自己的日志,管理员可修改所有日志”的规则。
步骤:
hooks目录,将pre-revprop-change.tmpl复制并重命名为pre-revprop-change(Linux需赋予执行权限:chmod +x pre-revprop-change)。pre-revprop-change文件,添加以下内容:
@echo off
setlocal
set REPOS=%1
set REV=%2
set USER=%3
set PROPNAME=%4
set ACTION=%5
# 只允许修改svn:log属性
if not "%PROPNAME%"=="svn:log" goto refuse
# 只允许修改操作(M:modify)
if not "%ACTION%"=="M" goto refuse
# 超级管理员(如admin)可修改所有日志
if "%USER%"=="admin" goto ok
# 普通用户只能修改自己的日志
svnlook author "%REPOS%" -r "%REV%" | findstr /b /c:"%USER%" > nul
if %errorlevel% equ 0 goto ok
:refuse
echo 不允许修改%sPROPNAME%属性,或无权限修改他人的日志。>&2
exit 1
:ok
exit 0
#!/bin/sh
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"
# 只允许修改svn:log属性
if [ "$PROPNAME" != "svn:log" ]; then
echo "不允许修改$PROPNAME属性。" >&2
exit 1
fi
# 只允许修改操作
if [ "$ACTION" != "M" ]; then
echo "只允许修改操作。" >&2
exit 1
fi
# 超级管理员(如admin)可修改所有日志
if [ "$USER" = "admin" ]; then
exit 0
fi
# 普通用户只能修改自己的日志
svnlook author "$REPOS" -r "$REV\"" | grep -q "^$USER\$"
if [ $? -eq 0 ]; then
exit 0
else
echo "不允许修改他人的日志。" >&2
exit 1
fi
tsvn:logminsize)仅对使用TortoiseSVN的用户有效,若团队中有其他客户端(如命令行SVN),必须配置服务器端pre-commit钩子才能全局生效。svnlook.exe路径需根据实际安装位置调整(如VisualSVN Server默认路径为C:\Program Files\VisualSVN Server\bin\svnlook.exe)。pre-revprop-change钩子需谨慎配置,避免过度开放权限(如允许所有用户修改所有日志),防止日志被恶意篡改。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。