svn权限配置最常见的“隐形杀手”是空格:svnserve.conf中配置项必须顶格书写,否则报“option expected”;authz中等号两侧、路径节括号内外及中文/空格路径名均需严格无多余空格,且修改后须重启服务。

SVN权限配置出错,最常见的“隐形杀手”就是空格——它不报语法错误,却让整个配置失效。问题集中在两个文件:svnserve.conf 和 authz。空格位置不对,SVN直接拒绝识别,报错如 Option expected 或 Invalid authz configuration。
svnserve.conf 顶格写,注释取消后必须清空行首空格
这个文件对缩进极其敏感:所有配置项(如 anon-access、authz-db)必须顶行书写,前面不能有任何空格或制表符。
- 错误写法:
authz-db = authz(前面两个空格)→ 触发svnserve.conf:12: Option expected - 正确写法:
authz-db = authz(严格顶格,无前置空格) - 编辑时别只删
#,要同步删掉该行开头所有空白字符;推荐用 VS Code、vim 或 Notepad++ 显示空白符号辅助检查 - 改完必须重启 svnserve:
pkill svnserve && svnserve -d -r /path/to/repos
authz 文件避免三类空格陷阱
authz 虽然不强制顶格,但空格会破坏解析逻辑,尤其在关键位置:
-
用户/组赋值等号两侧不能有空格:写成
dev = alice,bob是错的,应为dev=alice,bob(等号紧贴,逗号后也不加空格) -
路径节括号内不能含多余空格:例如
[project:/trunk ](末尾空格)或[ project:/trunk](开头空格)都可能导致匹配失败 -
中文路径或带空格的目录名需原样复现:如果仓库里真有
bbb 1.0这个目录,authz 中必须写成[repo:/source/device/bbb 1.0],不能写成bbb1.0或去掉空格
用工具主动验证,别靠肉眼猜
人工检查容易漏掉不可见字符,建议用标准工具交叉验证:
- 运行
svnauthz-validate /path/to/authz:能准确定位第几行、哪个字符出错(比如 BOM、CRLF 或非法空格) - 用
file authz查编码,确保是 UTF-8 without BOM;Windows 编辑后可用sed -i 's/\r$//' authz清理回车符 - 用
cat -A authz(Linux/macOS)或 Notepad++ 的“显示所有字符”功能,把空格、制表符、换行符全显出来再清理
路径与启动模式必须严格对应
空格只是表象,背后常连着更深层的匹配失效:
- 若 svnserve 启动命令是
svnserve -d -r /data/svn/proj1(单库模式),authz 中路径节只能写[/trunk],写成[proj1:/trunk]就会被忽略——这不是空格问题,但常因格式混乱一并发生 - 客户端 URL(如
svn://host/proj1)和 authz 路径节必须语义一致;URL 多一层,路径节就要多一层前缀 - 所有引用的用户名、组名,必须在
passwd或[groups]中真实存在且拼写完全一致(区分大小写)











