svn的$author$等关键字需显式设置svn:keywords属性并满足文本类型、未锁定等条件,才在commit/update时被替换为实际值。

SVN 的 $Author$ 变量(以及其他关键字如 $Date$、$Revision$)本身不会“自动替换”——它需要配合 SVN 的 关键字替换(Keyword Substitution) 属性才能生效。关键在于正确设置 svn:keywords 属性,并确保文件是文本类型、未被锁定、且在提交/更新时触发替换。
启用 Author 关键字替换
SVN 默认不启用任何关键字替换,必须显式设置 svn:keywords 属性,告诉 SVN 哪些变量需要被替换:
- 在文件中插入形如
$Author$的标记(注意:必须严格按$KeywordName$格式,前后美元符不可省略) - 执行命令为该文件启用 Author 替换:
svn propset svn:keywords "Author" 文件名 - 若还需其他关键字(如最后修改时间),可一并写入:
svn propset svn:keywords "Author Date Revision" 文件名 - 设置后需提交变更:svn commit -m "启用 Author 关键字"
确保文件满足替换前提
即使设置了属性,SVN 也不会对所有文件执行替换。以下条件缺一不可:
《SVN视频教程》,SVN:全称Subversion,是代码版本管理软件,管理着随时间改变的数据。这些数据放置在一个中央资料档案库 (repository) 中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。许多人会把版本控制系統想像成某种“时光机器”。
-
文件必须是文本类型:SVN 对二进制文件禁用关键字替换。可通过
svn propget svn:mime-type 文件名检查;若返回application/octet-stream或为空,建议显式设为文本:
svn propset svn:mime-type "text/plain" 文件名(或更精确如text/x-java、text/html) -
文件不能处于“锁定”状态:已执行
svn lock的文件会跳过关键字替换 -
替换只发生在 commit 和 update 时:编辑文件时看到的仍是
$Author$;提交后,SVN 服务端会将该字符串替换为实际用户名;下次 update 时,本地工作副本也会同步更新后的值
常见问题与验证方法
如果 $Author$ 没有被替换,按顺序排查:
- 运行
svn proplist -v 文件名,确认svn:keywords属性存在且值包含Author - 检查
svn:mime-type是否为文本类型(非application/octet-stream) - 确认该文件未被
svn lock锁定(svn info 文件名查看 Lock Info) - 手动修改文件内容 → 提交 → 再次检出或更新,观察
$Author$是否变为你的用户名(如$Author: zhangsan $) - 注意:替换后保留空格和原始格式,例如
$Author$可能变成$Author: zhangsan $,前后空格和冒号是 SVN 自动添加的,不要手动删除
注意事项与局限性
关键字替换不是动态模板引擎,使用时需注意:
- 仅支持有限的关键字:
Author、Date、Revision、HeadURL、Id(Id是前四者的组合) - 替换发生在服务端(commit 时)和客户端(update 时),但不会在编辑过程中实时刷新
- 不适用于 Git 等分布式系统 —— 这是 SVN 特有的中心化特性
- 若多人协作,
$Author$显示的是最后一次提交该文件的人,不是初始作者










