svn diff (di)
Name
svn diff (di) — This displays the differences between two revisions or paths.
Synopsis
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]
Description
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
TARGETs as they are seen inREVbetween two revisions.TARGETs may be all working copy paths or allURLs. IfTARGETs are working copy paths,Ndefaults toBASEandMto the working copy; ifTARGETs areURLs,Nmust be specified andMdefaults toHEAD. The-c Moption is equivalent to-r N:MwhereN = M-1. Using-c -Mdoes the reverse:-r M:NwhereN = M-1.Display the differences between
OLD-TGTas it was seen inOLDREVandNEW-TGTas it was seen inNEWREV.PATHs, if given, are relative toOLD-TGTandNEW-TGTand restrict the output to differences for those paths.OLD-TGTandNEW-TGTmay be working copy paths orURL[@REV].NEW-TGTdefaults toOLD-TGTif not specified.-r NmakesOLDREVdefault toN;-r N:MmakesOLDREVdefault toNandNEWREVdefault toM.
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
revisions 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:MThe server compares
TARGET@NandTARGET@M.--revision NThe client compares
TARGET@Nagainst 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).
Options
--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
Examples
Compare BASE and your working copy
(one of the most popular uses of 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) …
See how your working copy's modifications compare against an older revision:
$ svn diff -r 3900 COMMITTERS Index: COMMITTERS =================================================================== --- COMMITTERS (revision 3900) +++ COMMITTERS (working copy) …
Compare revision 3000 to revision 3500 using “@” syntax:
$ 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)
…
Compare revision 3000 to revision 3500 using range notation (pass only the one URL in this case):
$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS Index: COMMITTERS =================================================================== --- COMMITTERS (revision 3000) +++ COMMITTERS (revision 3500) …
Compare revision 3000 to revision 3500 of all the files in
trunk using range notation:
$ svn diff -r 3000:3500 http://svn.collab.net/repos/svn/trunk
Compare revision 3000 to revision 3500 of only three
files in trunk using range
notation:
$ svn diff -r 3000:3500 --old http://svn.collab.net/repos/svn/trunk \
COMMITTERS README HACKING
If you have a working copy, you can obtain the differences without typing in the long URLs:
$ 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>