本手册是为了描述 Subversion 1.4 版本而编写的。如果您正在运行更新版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅与您 Subversion 版本相对应的版本。
svn diff — 显示两个修订版或路径之间的差异。
diff [-c M | -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'来显示工作副本中的本地修改。
显示对 TARGET 的更改,这些更改是在 REV 中两个修订版之间看到的。 TARGET 可以是所有工作副本路径或所有 URL。如果 TARGET 是工作副本路径,则 N 默认设置为 BASE,而 M 则默认为工作副本;如果为 URL,则必须指定 N,而 M 默认为 HEAD。“-c M” 选项等效于“-r N:M”,其中 N = M-1。使用“-c -M”则相反:“-r M:N”,其中 N = M-1。
显示 OLD-TGT 在 OLDREV 中看到的差异,以及 NEW-TGT 在 NEWREV 中看到的差异。如果提供了 PATH,则它们相对于 OLD-TGT 和 NEW-TGT,并将输出限制为这些路径的差异。 OLD-TGT 和 NEW-TGT 可以是工作副本路径或 URL[@REV]。如果未指定 NEW-TGT,则其默认为 OLD-TGT。“-r N” 将 OLDREV 默认为 N,-r N:M 将 OLDREV 默认为 N,并将 NEWREV 默认为 M。
是 svn diff --old=OLD-URL[@OLDREV] --new=NEW-URL[@NEWREV] 的简写。
svn diff -r N:M URL 是 svn 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,则可以使用 --revision 或使用前面描述的“@” 表示法来指定修订版 N 和 M。
如果 TARGET 是一个工作副本路径,则 --revision 选项表示:
--revision N:M服务器比较 TARGET@N 和 TARGET@M。
--revision N客户端将 TARGET@N 与工作副本进行比较。
--revision)客户端比较 TARGET 的基线和工作副本。
如果使用替代语法,则服务器会分别在修订版 N 和 M 处比较 URL1 和 URL2。如果省略了 N 或 M 中的任何一个,则假设值为 HEAD。
默认情况下,svn diff 会忽略文件的祖先关系,而只是比较两个文件的内容。如果使用 --notice-ancestry,则在比较修订版时会考虑相关路径的祖先关系(也就是说,如果对两个内容相同但祖先关系不同的文件运行 svn diff,您将看到整个文件的内容都被删除并重新添加)。
--revision (-r) ARG --change (-c) ARG --old ARG --new ARG --non-recursive (-N) --diff-cmd CMD --extensions (-x) "ARGS" --no-diff-deleted --notice-ancestry --summarize --force --username USER --password PASS --no-auth-cache --non-interactive --config-dir DIR
比较 BASE 和您的工作副本(svn diff 的最常见用法之一)
$ svn diff COMMITTERS Index: COMMITTERS =================================================================== --- COMMITTERS (revision 4404) +++ COMMITTERS (working copy)
查看文件 COMMITTERS 修订版 9115 中的更改
$ svn diff -c 9115 COMMITTERS Index: COMMITTERS =================================================================== --- COMMITTERS (revision 3900) +++ 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)
使用范围表示法比较 trunk 中所有文件的修订版 3000 与 3500
$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk
使用范围表示法比较 trunk 中仅三个文件的修订版 3000 与 3500
$ 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 >