This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.
svn diff (di) — 显示两个版本号或路径之间的差异.
svn diff [-c
M | -r N[:M]] [TARGET[@REV]...]
svn diff [-r
N[:M]] --old=OLD-TGT[@OLDREV] [--new=NEW-TGT[@NEWREV]] [PATH...]
svn diff
OLD-URL[@OLDREV] NEW-URL[@NEWREV]
显示两个路径之间的差异, 用户可以按照如下方式使用 svn diff:
直接执行 svn diff 来查看工作副本的
本地修改.
显示限定版本号为 REV 时,
TARGET 在两个版本号之间的变化.
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
显示限定版本号为 OLDREV 的
OLD-TGT 和限定版本号
NEWREV 的
NEW-TGT 之间的差异. 如果指定了相对于
OLD-TGT 和
NEW-TGT 的
PATH, 那么输出的就是这些路径的差异.
OLD-TGT 和
NEW-TGT 可以是工作副本路径或
URL[@REV]. 如果没有指定
NEW-TGT, 那么它默认就是
OLD-TGT. -r 使得
NOLDREV 默认是 N;
-r 使得 N:MOLDREV
默认是 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 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 (-r) 指定,
或者用以前介绍过的 “@” 记号.
如果 TARGET 是一个工作副本路径, 那么
命令的默认行为 (没有指定选项 --revision
(-r)) 就是显示 TARGET
的 BASE 与工作副本之间的差异. 如果指定了选项
--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) 向外部差异比较
工具传递参数:
$ svn diff --diff-cmd /usr/bin/diff -x "-i -b" COMMITTERS Index: COMMITTERS =================================================================== 0a1,2 > This is a test > $
最后, 可以同时使用选项 --xml 和
--summarize 查看修改的 XML 描述, 修改的具体内容不
会显示出来:
$ 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>