svn diff (di)
Prev | svn Subcommands | Next

## 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 `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`

  The server compares `TARGET@N` and `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).

## Options

    --change (-c) ARG
    --changelist (--cl) ARG
    --depth ARG
    --diff-cmd CMD
    --extensions (-x) ARG
    --force
    --git
    --internal-diff
    --new ARG
    --no-diff-deleted
    --notice-ancestry
    --old ARG
    --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>

Prev | Up | Next
svn delete (del, remove, rm) | Home | svn export