svn diff 命令可比对任意两个历史版本差异,需准确指定版本号、时间戳或标签,格式为 svn diff -r n:m url_or_path,支持重定向导出补丁、摘要显示及忽略空格等选项,并注意路径存在性与权限问题。

直接用 svn diff 命令就能比对任意两个历史版本的差异,关键在于准确指定版本号或时间戳,并确保目标路径存在。
指定两个具体版本号进行比对
最常用的方式是明确给出两个修订版本(revision),格式为:svn diff -r N:M URL_OR_PATH
其中 N 和 M 是整数修订号,N 为较旧版本,M 为较新版本。如果在工作副本中执行,可省略 URL,直接写本地路径。
- 比对当前工作副本与版本 123 的差异:
svn diff -r 123 - 比对版本 100 和 150 之间的差异(远程仓库):
svn diff -r 100:150 https://svn.example.com/repo/trunk/file.txt - 比对本地文件在版本 88 和 95 的改动:
svn diff -r 88:95 src/main.java
使用日期或标签比对历史快照
SVN 支持用日期、分支名或标签名代替数字版本号,需用花括号包裹:
- 比对“昨天”和“三天前”的代码:
svn diff -r "{2024-04-05}:{2024-04-03}" - 比对某次发布标签与当前 trunk:
svn diff -r "tags/v2.1.0:HEAD" trunk/ - 注意:日期格式必须是
{YYYY-MM-DD}或{YYYY-MM-DD HH:MM:SS},且 SVN 服务端需支持该语法
查看差异内容并导出补丁文件
默认输出到终端,可用重定向保存为 patch 文件,方便审查或应用:
- 保存差异到文件:
svn diff -r 200:205 > changes.patch - 只显示变动的文件名(不显示具体内容):
svn diff -r 200:205 --summarize - 忽略空格变化(更聚焦逻辑变更):
svn diff -r 200:205 --ignore-all-space
常见问题与注意事项
实际操作中容易因路径或权限出错,建议提前确认:
- 确保所比对的路径在两个版本中都存在;若文件在某个版本被删除,需加
--notice-ancestry或改用svn log查看生命周期 - 若提示
Unable to connect to a repository,检查 URL 是否完整,是否需要认证(可加--username和--password) - 本地未更新到最新时,
HEAD指的是服务器最新版,不是本地最新已检出版本











