答案是服务端权限配置错位:需确认svnserve.conf中authz-db已启用且无空格、路径大小写匹配、父目录有r权限、用户在passwd和groups中正确定义,并用svnauthz-validate校验语法。

这个问题表面是“本地无写权限”,实际几乎从来不是客户端的问题,而是服务端权限配置与执行逻辑之间的错位。authz 文件写了 rw,但用户仍无法提交,关键在于 SVN 的权限判定机制并非只看 authz 一行,而是多层联动的结果。
确认 svnserve.conf 是否真正启用 authz
authz 文件再正确,如果 svnserve.conf 里没打开它,就等于没写。重点检查:
- svnserve.conf 中 authz-db = authz 这行是否取消注释(即前面没有 #)且路径正确(相对 conf 目录)
- 确保该行顶格书写**,不能有前置空格**,否则会报 “Option expected”
- 确认 anon-access = none 和 auth-access = write 已设置——后者虽为默认写权限,但它是 authz 生效的前提基础
检查 authz 路径是否匹配真实仓库结构
SVN 权限按路径逐级继承,但必须严格匹配。常见错误:
- 写成 project 或 /project/,而实际仓库路径是 /repo/project(注意开头斜杠和大小写)
- Linux 服务端区分大小写,/Project ≠ /project
- 子目录授权前,父目录未给 r 权限——例如只给了 /repo/project/src 的 rw,但没给 /repo/project 的 r,用户连目录都列不出来,自然无法写
验证用户身份是否被正确认定
SVN 不认用户名拼写错误,也不认组别归属遗漏:
- 用户必须在 passwd 文件中存在,且密码正确;中文用户名或含特殊字符易失败
- 若用 @dev = rw,要确认该用户确实在 [groups] 段被定义,且拼写完全一致(包括空格)
- 执行 svn info 查看当前认证用户是否为你预期的那个——有时客户端缓存了旧账号,导致你以为是 A 登录,实际是 B
排除配置文件中的隐藏语法雷区
看似干净的 authz 文件,常因肉眼难辨的格式问题失效:
- 行尾或行首存在不可见空格、tab、BOM 头(尤其 Windows 编辑器另存为 UTF-8 带 BOM 时)
- 使用了短横线 - 代替等号 =,如 user1 - rw → 应为 user1 = rw
- 包含 http:// 或 https:// 字样(哪怕注释里)——某些 SVN 版本会直接拒绝加载整个 authz 文件
- 用 svnauthz-validate 工具校验:命令如
svnauthz-validate /path/to/authz,它会精准报出第几行哪个字符出错











