本文字档尚在开发中,可能会随时修改,可能无法准确描述任何已发布的 Apache™ Subversion® 软件版本。为避免误导他人,请勿将此页面设为书签或推荐给他人。请访问 https://svnbook.subversion.org.cn/ 获取该书籍的稳定版本。
svn diff (di) - 显示两个修订版或路径之间的差异。
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 默认值为工作副本;如果 TARGET 是 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-URL[@OLDREV] NEW-URL[@NEWREV] 是 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,则修订版 N 和 M 可以通过 --revision (-r) 选项或使用前面描述的 “@” 符号给出。
如果 TARGET 是工作副本路径,则默认行为(当没有提供 --revision (-r) 选项时)是显示 TARGET 的基础副本和工作副本之间的差异。但是,如果在此场景中指定了 --revision (-r) 选项,则意味着
--revision N:M
服务器将比较 TARGET@N 和 TARGET@M。
--revision N
客户端将比较 TARGET@N 与工作副本。
如果使用备用语法,则服务器将在修订版 N 和 M 下分别比较 URL1 和 URL2。如果省略了 N 或 M,则假定值为 HEAD。
默认情况下,svn diff 忽略文件的祖先,仅比较正在比较的两个文件的内容。如果您使用 --notice-ancestry,则在比较修订版时将考虑所讨论路径的祖先(即,如果您对两个内容相同但祖先不同的文件运行 svn diff,您将看到整个文件的内容已被移除并重新添加)。
--change(-c)ARG--changelist(--cl)ARG--depthARG--diff-cmdCMD--extensions(-x)ARG--force--git--ignore-properties--internal-diff--newARG--no-diff-added--no-diff-deleted--notice-ancestry--oldARG--patch-compatible--properties-only--revision(-r)REV--show-copies-as-adds--summarize--xml
比较 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 --extensions (-x) 将参数直接传递给外部 diff 程序
$ svn diff --diff-cmd /usr/bin/diff -x "-i -b" COMMITTERS Index: COMMITTERS =================================================================== 0a1,2 > This is a test > $
最后,您可以将 --xml 选项与 --summarize 选项一起使用,以查看描述修订版之间发生的更改的 XML,但不包含 diff 本身的内容
$ svn diff --summarize --xml http://svn.red-bean.com/repos/test@r2 \
http://svn.red-bean.com/repos/test
<?xml version="1.0"?>
<diff>
<paths>
<path
props="none"
kind="file"
item="modified">http://svn.red-bean.com/repos/test/sandwich.txt</path>
<path
props="none"
kind="file"
item="deleted">http://svn.red-bean.com/repos/test/burrito.txt</path>
<path
props="none"
kind="dir"
item="added">http://svn.red-bean.com/repos/test/snacks</path>
</paths>
</diff>