本手册旨在描述 Subversion 1.2。如果您正在运行更新版本的 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-TGT
和 NEW-TGT
之间的差异。如果给出 PATH
,则它们被视为相对于 OLD-TGT
和 NEW-TGT
,并且输出仅限于这些路径中的差异。 OLD-TGT
和 NEW-TGT
可以是工作副本路径或 URL
[@
REV
]
。 OLD-TGT
默认为当前工作目录,而 NEW-TGT
默认为 OLD-TGT
。 N
默认为 BASE
,或者如果 OLD-TGT
是 URL,则默认为 HEAD
。 M
默认为当前工作版本,或者如果 NEW-TGT
是 URL,则默认为 HEAD
。 svn diff -r N 将 OLD-TGT
的修订版本设置为 N
,svn diff -r N:M 还将 NEW-TGT
的修订版本设置为 M
。
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
或使用前面描述的“@”表示法给出。
如果 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) 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)
使用范围表示法比较 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 >