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
使得
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
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
--depth
ARG
--diff-cmd
CMD
--extensions
(-x
)ARG
--force
--git
--ignore-properties
--internal-diff
--new
ARG
--no-diff-added
--no-diff-deleted
--notice-ancestry
--old
ARG
--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>