svn diff 支持两种核心对比模式:一是工作副本与单个远程版本(如 svn diff -r 1234),二是两个远程版本之间(如 svn diff -r 1200:1250);不支持工作副本同时与两个远程版本对比,且 -r A:B 要求 A ≤ B。

可以直接用 svn diff 命令对比工作副本与任意两个远程版本的差异,但需注意:工作副本只能和一个远程版本直接比(不是“同时比两个远程版本”),真正支持“任意两个远程版本之间”对比的是 -r 版本A:版本B 形式。所谓“工作副本与两个远程版本”的需求,通常拆解为两种实用场景:一是工作副本 vs 某个远程版本;二是两个远程版本之间(不含工作副本)。下面分情况说明操作方法。
对比工作副本与某一个远程版本
这是最常用的情形,比如想看本地改了什么、是否和服务器最新版一致:
- 对比工作副本与最新提交(HEAD):
svn diff(不带参数,默认比 BASE → 工作副本)或svn diff -r HEAD - 对比工作副本与指定版本(如 r1234):
svn diff -r 1234(自动以当前工作副本为“新版本”,r1234 为“旧版本”) - 若只关心变更文件列表(不显示具体代码行):
svn diff -r 1234 --summarize
对比两个远程版本(不含工作副本)
适用于审查某次发布范围、回溯某段修改历史:
《SVN视频教程》,SVN:全称Subversion,是代码版本管理软件,管理着随时间改变的数据。这些数据放置在一个中央资料档案库 (repository) 中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。许多人会把版本控制系統想像成某种“时光机器”。
- 比整个项目目录:
svn diff -r 1200:1250 - 比单个文件:
svn diff -r 1200:1250 path/to/file.java - 快速查看哪些文件被修改过(不展开内容):
svn diff -r 1200:1250 --summarize - 若版本号不确定,先查日志:
svn log -l 20或svn log -r 1200:1250
用 TortoiseSVN 图形化完成等效操作
Windows 用户更直观,且支持导出差异文件:
- 右键项目文件夹 → TortoiseSVN → Show Log
- 按住 Ctrl 键选中两个版本(注意顺序:旧版本在上、新版本在下)→ 右键 → Compare Revisions
- 差异窗口中可双击任一文件,用内置或配置的外部工具(如 Beyond Compare)查看逐行差异
- 勾选变更文件 → 右键 → Export selection to…,即可导出所有差异文件(保持原目录结构)
注意事项与常见问题
避免因理解偏差导致命令无效:
-
svn diff -r A:B中 A 必须 ≤ B;若写反(如-r 200:100),结果为空或报错 - 工作副本不能直接参与
-r A:B的“两端”——它既不是 URL 也不是明确版本号,所以不支持类似svn diff -r WORKING:1234这种写法 - 中文路径或 UTF-8 文件在 CMD 中可能乱码,执行前运行
chcp 65001切换为 UTF-8 编码页 - 如果要合并差异,
svn merge -r 1200:1250 .可将 r1200→r1250 的变更应用到当前工作副本










