本手册旨在描述 Subversion 1.1。如果您运行的是更新版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的本书版本。

名称

svn diff — 显示两个路径之间的差异。

概要

diff [-r N[:M]] [TARGET[@REV]...]
diff [-r N[:M]] --old OLD-TGT[@OLDREV] [--new NEW-TGT[@NEWREV]] [PATH...]
diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]

描述

显示两个路径之间的差异。您可以使用 svn diff 的三种不同方式是

svn diff [-r N[:M]] [--old OLD-TGT] [--new NEW-TGT] [PATH...] 显示 OLD-TGTNEW-TGT 之间的差异。如果给出 PATH,则它们被视为相对于 OLD-TGTNEW-TGT,并且输出仅限于这些路径中的差异。 OLD-TGTNEW-TGT 可以是工作副本路径或 URL[@REV]. OLD-TGT 默认设置为当前工作目录,而 NEW-TGT 默认设置为 OLD-TGTN 默认设置为BASE或者,如果 OLD-TGT 是 URL,则默认为HEAD. M 默认设置为当前工作版本,或者,如果 NEW-TGT 是 URL,则默认为HEAD. svn diff -r NOLD-TGT 的修订版本设置为 Nsvn diff -r N:M 还将 NEW-TGT 的修订版本设置为 M

svn diff -r N:M URLsvn diff -r N:M --old=URL --new=URL 的简写形式。

svn diff [-r N[:M]] URL1[@N] URL2[@M]svn diff [-r N[:M]] --old=URL1 --new=URL2 的简写形式。

如果 TARGET 是 URL,则修订版本 N 和 M 可以通过--revision或使用前面描述的“@”符号来给出。

如果 TARGET 是工作副本路径,则--revision开关表示

--revision N:M

服务器比较 TARGET@NTARGET@M

--revision N

客户端比较 TARGET@N 与工作副本。

(无--revision)

客户端比较 TARGET 的基线和工作副本。

如果使用备用语法,服务器将分别在修订版本 NM 处比较 URL1URL2。如果 NM 遗漏,则假定值为HEAD

默认情况下,svn diff 忽略文件的祖先关系,仅仅比较两个被比较文件的內容。如果您使用--notice-ancestry,则在比较修订版本时将考虑相关路径的祖先关系(也就是说,如果您在两个具有相同內容但不同祖先关系的文件上运行 svn diff,您将看到整个文件內容已被删除并再次添加)。

备用名称

di

更改

访问存储库

用于获取与工作副本中的任何内容(除了BASE修订版本)的差异

开关

--revision (-r) REV
--old OLD-TARGET
--new NEW-TARGET
--extensions (-x) "ARGS"
--non-recursive (-N)
--diff-cmd CMD
--notice-ancestry
--username USER
--password PASS
--no-auth-cache
--non-interactive
--no-diff-deleted
--config-dir DIR

示例

比较BASE和您的工作副本(svn diff 最流行的用途之一)

$ svn diff COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 4404)
+++ COMMITTERS	(working copy)

查看工作副本的修改与较早修订版本的比较

$ svn diff -r 3900 COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3900)
+++ COMMITTERS	(working copy)

使用“@”符号比较修订版本 3000 与 3500

$ svn diff http://svn.collab.net/repos/svn/trunk/COMMITTERS@3000 http://svn.collab.net/repos/svn/trunk/COMMITTERS@3500
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3000)
+++ COMMITTERS	(revision 3500)
…

使用范围符号比较修订版本 3000 与 3500(在这种情况下,您只需要传递一个 URL)

$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3000)
+++ COMMITTERS	(revision 3500)

比较修订版本 3000 与 3500 的所有文件,位于trunk中,使用范围符号

$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk
          

比较修订版本 3000 与 3500 的

trunk

中的三个文件,trunk中,使用范围符号

$ svn diff -r 3000:3500 --old http://svn.collab.net/repos/svn/trunk COMMITTERS README HACKING
          

如果您有一个工作副本,您可以获取差异而无需输入长 URL

$ svn diff -r 3000:3500 COMMITTERS 
Index: COMMITTERS
===================================================================
--- COMMITTERS	(revision 3000)
+++ COMMITTERS	(revision 3500)

使用--diff-cmd CMD -x将参数直接传递给外部 diff 程序

$ svn diff --diff-cmd /usr/bin/diff -x "-i -b" COMMITTERS 
Index: COMMITTERS
===================================================================
0a1,2
> This is a test
>