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]
Display the differences between two paths. You can use svn diff in the following ways:
Use just svn diff to display local modifications in a working copy.
Display the changes made to TARGET
s as they are
seen in REV
between two revisions.
TARGET
s may be all working copy paths or all
URL
s. If TARGET
s are
working copy paths, N
defaults to
BASE
and M
to the working
copy; if TARGET
s are
URL
s, N
must be
specified and M
defaults to
HEAD
. The -c M
option is equivalent
to -r N:M
where N = M-1
. Using
-c -M
does the reverse: -r M:N
where
N = M-1
.
Display the differences between OLD-TGT
as it was
seen in OLDREV
and
NEW-TGT
as it was seen in
NEWREV
. PATH
s, if
given, are relative to OLD-TGT
and
NEW-TGT
and restrict the output to differences
for those paths. OLD-TGT
and
NEW-TGT
may be working copy paths or
URL[@REV]
. NEW-TGT
defaults to OLD-TGT
if not specified.
-r N
makes OLDREV
default to
N
; -r N:M
makes
OLDREV
default to N
and NEWREV
default to
M
.
svn diff OLD-URL[@OLDREV] NEW-URL[@NEWREV]
is
shorthand for svn diff --old=OLD-URL[@OLDREV]
--new=NEW-URL[@NEWREV].
svn diff -r N:M URL
is shorthand for svn
diff -r N:M --old=URL --new=URL
.
svn diff [-r N[:M]] URL1[@N] URL2[@M]
is shorthand
for svn diff [-r N[:M]] --old=URL1 --new=URL2
.
If TARGET
is a URL, then revs
N
and M
can be given either via the
--revision
(-r
) option or by using the
“@” notation as described earlier.
If TARGET
is a working copy path, the default
behavior (when no --revision
(-r
) option
is provided) is to display the differences between the base and working
copies of TARGET
. If a
--revision
(-r
) option is specified in
this scenario, though, it means:
--revision N:M
服务器比较 TARGET@N
和
TARGET@M
。
--revision N
The client compares TARGET@N
against the working
copy.
If the alternate syntax is used, the server compares
URL1
and URL2
at
revisions N
and M
,
respectively. If either N
or
M
is omitted, a value of HEAD
is assumed.
By default, svn diff ignores the ancestry of files and
merely compares the contents of the two files being compared. If you use
--notice-ancestry
, the ancestry of the paths in question
will be taken into consideration when comparing revisions (i.e., if you run
svn diff on two files with identical contents but
different ancestry, you will see the entire contents of the file as having
been removed and added again).
--change (-c) ARG --changelist ARG --depth ARG --diff-cmd CMD --extensions (-x) ARG --force --new ARG --no-diff-deleted --notice-ancestry --old ARG --revision (-r) ARG --summarize --xml
比较BASE
和你的工作副本(svn diff最经常的用法):
$ svn diff COMMITTERS Index: COMMITTERS =================================================================== --- COMMITTERS (revision 4404) +++ COMMITTERS (working copy)
See what changed in the file COMMITTERS
revision 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和35000比较:
$ 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)
使用范围符号比较修订版本3000和3500trunk
中的所有文件:
$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk
使用范围符号比较修订版本3000和3500trunk
中的三个文件:
$ 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)
Use --diff-cmd
CMD
--extensions
(-x
) to pass arguments
directly to the external diff program:
$ svn diff --diff-cmd /usr/bin/diff -x "-i -b" COMMITTERS Index: COMMITTERS =================================================================== 0a1,2 > This is a test >
Lastly, you can use the --xml
option along with the
--summarize
option to view XML describing the changes that
occurred between revisions, but not the contents of the diff itself:
$ 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>