Codewarrior (Windows, Linux)

Graphical Client


http://www.freescale.com/webapp/sps/site/homepage.jsp?code=CW_HOME

Manual: No entry found.  However, CW apparently does have a diff. 
        
svnX code to make this work:

codewarrior_diff()
{
        osascript -e \
        "set file1 to POSIX file \"$1\"
        set file2 to POSIX file \"$2\"
        tell application \"CodeWarrior IDE\"
             activate
                Compare Files file1 to file2 without case sensitive and ignore extra space
                end tell"
}

http://svnx.googlecode.com/svn-history/r137/trunk/Resources/svndiff.sh

===========================================================================================
TextWrangler (Mac)


Graphical Client

http://www.barebones.com/products/textwrangler


The complete command line syntax for the “twdiff” tool is

twdiff [ --<options> ] [ OLDFILE NEWFILE | OLDFOLDER NEWFOLDER]

NOTE:

  diff-cmd=/usr/local/bin/twdiff
  diff-extensions=--wait

  It's important to note that the 'diff-extensions=--wait' needs to be
  included. If you exclude it, two temporary files are created from
  the different SVN files you are diff'ing BUT they are almost
  immediately deleted by the SVN client, and it's impossible to
  compare the differences. With it included, the files are preserved
  until TextWrangler is finished, and control is returned back to the
  svn client (which will clean up those temporary files according to
  its own rules/preferences/settings).

  https://groups.google.com/forum/?fromgroups=#!topic/textwrangler/sb6f-894uyg


Patrick from Barebones kindly sent me the manual:

                                             
TWDIFF(1)                Command Line Tools Reference                TWDIFF(1)



NAME
       twdiff - find file differences with TextWrangler.

SYNOPSIS
       twdiff [ --<options> ] [ NEWFILE OLDFILE | NEWFOLDER OLDFOLDER |
       NEWFILE OLDFOLDER ]

DESCRIPTION
       The twdiff tool is a simple utility that allows you to specify two
       files, or folders, for comparison via TextWrangler's Find Differences
       command. Type 'twdiff' followed by two file or folder names to invoke
       Find Differences on those items.

       In addition to direct file-to-file and folder-to-folder comparisons,
       the twdiff tool supports an additional command form:

           twdiff [options] file /path/to/some/folder

       If "/path/to/some/folder/file" exists, then "file" will be compared
       against "/path/to/some/folder/file". Otherwise, an error is reported.

       TextWrangler is a freeware text editor from Bare Bones Software.

OPTIONS
       The twdiff tool accepts only long form switches (options preceded by
       two dashes). The options offered by the twdiff tool mirror the settings
       available in the Find Differences dialog.

       Use "--" to end switch parsing. For example, to find differences
       between a file named "-a" and a file named "-z", use:

               twdiff -- -a -z

       --case-sensitive
            Equivalent to the "Case Sensitive" option in the dialog. If you
            use this option, the comparison will be performed with case
            sensitivity on.

       --flatten-folders
            Equivalent to the "Flatten Hierarchies" option in the dialog. If
            you use this option, TextWrangler considers the files in the
            folders as a single flat list, allowing a file in one folder to
            match a file of the same name in the other folder, regardless of
            whether they are in the same subfolder in both hierarchies.

       --help
            Display a basic help line with a summary of the available options.

       --ignore-curly-quotes
            Equivalent to the "Ignore Curly Quotes" option in the dialog. If
            you use this option, straight quotes and curly (typographer's)
            quotes will be considered identical for purposes of comparison.

       --ignore-extra-spaces
            Equivalent to the "Ignore Spaces: Runs" option in the dialog. If
            you use this option, whitespace runs of any length will be
            considered identical for purposes of comparison.

       --ignore-leading-spaces
            Equivalent to the "Ignore Spaces: Leading" option in the dialog.
            If you use this option, whitespace runs of any length at the
            beginning of a line will be considered identical for purposes of
            comparison.

       --ignore-trailing-spaces
            Equivalent to the "Ignore Spaces: Trailing" option in the dialog.
            If you use this option, whitespace runs of any length at the end
            of a line will be considered identical for purposes of comparison.

       --ignore-spaces
            Equivalent to using all three of the preceding --ignore...spaces
            options together.

       --resume
            Used in combination with --wait, this switch will cause the
            application which was frontmost when the twdiff tool was invoked
            to be made frontmost again once you close the files specified on
            the command line.

       --reverse
            Reverses the order of the arguments passed to BBEdit. This switch
            may be useful when you don't have direct control over the order of
            the arguments passed from an external source, e.g. when using
            bbdiff as a svn diff helper, but would like the arguments to be
            reversed before being passed to BBEdit.

       --short-version
            Display the short-form version number of the twdiff command line
            tool.

       --show-identical-files
            Equivalent to the "List Identical Files" option in the dialog (for
            folder comparisons). If you use this option, TextWrangler will
            list all common files in the compared folders regardless of their
            differences state. Otherwise, TextWrangler will list only files
            for which there are changes (paired files having differences) in
            the set of items that appear in both folders.

       --skip-shielded-folders
            Equivalent to the "Skip (...) Folders" option in the dialog (for
            folder comparisons). If you use this option, TextWrangler will
            ignore all files contained in folders whose names are enclosed in
            parentheses when performing the comparison.

       --text-files-only
            Equivalent to the "Only List Text Files" option in the dialog (for
            folder comparisons). If you use this option, TextWrangler will
            compare only files which it considers to be text files when
            performing the comparison. Otherwise, TextWrangler will compare
            all files present in the chosen folders.

            TextWrangler will consider a file to be a text file if it has a
            type of "TEXT" (or other well-known text type), or, if the file is
            typeless, according to the option chosen for "If file's encoding
            can't be guessed, use:" in the Text Encodings preference panel.

       --version
            Display the current version number of the twdiff command line tool
            and the TextWrangler application.

       --wait
            Wait until the file is closed in TextWrangler. Normally, the
            twdiff tool exits immediately after the specified files or folders
            are opened in TextWrangler. The --wait switch allows the twdiff
            tool to be used as an external differences engine for Unix tools
            that support such an option, by not returning back to the calling
            tool in the Terminal until the editing session is over.

AUTHORS
        Bare Bones Software, Inc.
        Web site: http://www.barebones.com/
        Email: support@barebones.com



03/25/2013                 Bare Bones Software, Inc.                 TWDIFF(1)


===========================================================================================
BBEdit (Mac)


Graphical Client

uses 'bbdiff'

The complete command line syntax for the “bbdiff” tool is

bbdiff [ --<options> ] [ OLDFILE NEWFILE | OLDFOLDER NEWFOLDER]


===========================================================================================
Araxis Windows (OS X)


Graphical Client

http://www.araxis.com/merge/scm_integration.html#Subversion

NOTE: not sure if this is Araxis internal config or the direct command
that is passed to SVN.(I think it's the latter)

"Open your ‘SVN configuration area’ configuration file in a text
editor. The default location for this file is
%APPDATA%\Subversion\config."

diff-cmd = C:\Program Files\Araxis\Araxis Merge\AraxisSVNDiff.exe

SvnX calls araxis like so: 

/usr/local/bin/araxissvndiff "$file1" "$file2" "$file1" "$file2" ;;

araxissvndiff [-? | -h] <firstTitle> <secondTitle> <firstFile> <secondFile>

To use araxissvndiff with the Subversion command-line tools, edit your
~/.subversion/config so that the diff-cmd property in the [helpers]
section references araxissvndiff. For example:

diff-cmd = /Applications/Araxis\ Merge/Utilities/araxissvndiff

This line is commented-out in the default configuration file, so you
should remove the # character and space at the start if present.
araxissvndiff3

This utility can be used to enable the Subversion command-line utility
(svn) to use Araxis Merge to merge files.  Usage

araxissvndiff3 [-? | -h] <mineTitle> <olderTitle> <yoursTitle> <mineFile> <olderFile> <yoursFile>

To use araxissvndiff3 with the Subversion command-line tools, edit your 
~/.subversion/config so that the diff3-cmd property in the [helpers] section
references araxissvndiff3. For example:

diff3-cmd = /Applications/Araxis\ Merge/Utilities/araxissvndiff3

This line is commented-out in the default configuration file, so you should 
remove the # character and space at the start if present.


===========================================================================================
DiffMerge   (Windows, Mac OS X, and Linux)


Graphical Client

SYNOPSIS
diffmerge [options] [pathname1 [pathname2 [pathname3]]]
Man page: https://github.com/bagilevi/homefiles/blob/master/bin/diffmerge.man1

other info that may be useful:
Uses TortoiseSVN and it looks like that is the only option -- nothing
else is mentioned in the DiffMerge manual -- it points here:

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-settings.html#tsvn-dug-settings-progs

     [DiffMergePath]\DiffMerge.exe /t1=Mine /t2=Original %mine %base

Syntax for 'VSS' looks like this: 

    Operation: File Difference

    File Extension: .*

    Command:  [DiffMergePath]\diffmerge.exe –title1=”original version” –title2=”modified version” %1 %2

    Operation: File Merge

    File Merge: .*

    Command: [DiffMergePath]\diffmerge.exe –title1=”source branch” –title2=”base version” –title3=”destination branch” –result=%4 %1 %3 %2

There isn't an entry in the manual that actually describes the
diffmerge tool itself.


===========================================================================================
TortoiseSVN


Graphical Client, see DiffMerge


===========================================================================================
Rhapdosy (Windows)


Graphical Client

http://www.ibm.com/developerworks/wikis/download/attachments/121930141/Using_Rhapsody_with_Subversion1.pdf
uses Diffmerge:

For each of the file types added to the Advanced list found within the Diff 
Viewer pane, add the following to the External Program field:

<Path to Rhapsody Install>\DiffMerge.exe -xcompare -base %base %theirs %mine

For each of the file types added to the Advanced list found within the Merge 
Tool pane, add the following to the External Program field:

<Path to Rhapsody Install>\DiffMerge.exe -xmerge -base %base %theirs %mine -out %merged


===========================================================================================
KDiff3 (Linux)
 

Graphical Client

http://kdiff3.sourceforge.net/doc/documentation.html

Command line tool with an editor (not sure if that counts as graphical, it could be ed!)

SYNOPSIS
       KDiff3 [QT options]  [KDE options]  [KDiff3 options]  [File1/base]  [File2]  [File3]


Options:
  -m, --merge               Merge the input.
  -b, --base file           Explicit base file. For compatibility with certain tools.
  -o, --output file         Output file. Implies -m. E.g.: -o newfile.txt
  --out file                Output file, again. (For compatibility with certain tools.)
  --auto                    No GUI if all conflicts are auto-solvable. (Needs -o file)
  --qall                    Don't solve conflicts automatically. (For compatibility...)
  --L1 alias1               Visible name replacement for input file 1 (base).
  --L2 alias2               Visible name replacement for input file 2.
  --L3 alias3               Visible name replacement for input file 3.
  -L, --fname alias         Alternative visible name replacement. Supply this once for every input.

Extra notes:

   http://stackoverflow.com/questions/4803881/how-to-set-kdiff3-as-merge-tool-for-svn

   "Although there is a problem with kdiff3 which does not support 4
   plain arguments (the svn passes 4 plain arguments to kdiff3, and it
   does not work), so it is usually called with a simple script to
   translate the arguments, e.g., "kdiff3caller":"

   #!/bin/sh
   kdiff3 $1 $2 $3 -o $4

   kdiff3 dev discussion of the above:
   http://kde.6490.n7.nabble.com/KDiff3-subversion-support-as-merge-tool-cmd-td1446860.html


===========================================================================================
vim (almost any OS you want)

commandline helper for Vim style editors

http://vimdoc.sourceforge.net/htmldoc/diff.html

vimdiff [options] file1 file2 [file3 [file4]]

The vim diff mode can work with up to 4 files.

Notes:
http://stackoverflow.com/questions/569270/change-default-svn-diffing-tool
#!/bin/sh
# Configure your favorite diff program here.
DIFF="/usr/bin/vimdiff" 
# Subversion provides the paths we need as the sixth and seventh
# parameters.
LEFT="$6"
RIGHT="$7"
# Call the diff command (change the following line to make sense for
# your merge program).
"$DIFF" "$LEFT" "$RIGHT"

# Return an errorcode of 0 if no differences were detected, 1 if some were.
# Any other errorcode will be treated as fatal.

Then change your $HOME/.subversion/config file to point at that script:

[helpers]
diff-cmd = /home/matt/bin/diffwrap.sh


===========================================================================================
FileMerge (Mac)


Graphical Client

  http://www.defraine.net/~brunod/fmdiff/
  FM uses wrapperscripts to run the commendline diff programs fmdiff

  canonical usecase:

     $ svn diff --diff-cmd fmdiff <other diff options, files or URLs>

  To merge your local changes with those of the repository in FileMerge, do:

     $ svn update --diff3-cmd fmdiff3

Code for fmdiff script:

http://soft.vub.ac.be/svn-gen/bdefrain/fmscripts/fmdiff

if [ -n "$mergefile" ]; then
   [[ "$mergefile" == */* ]] || mergefile="./$mergefile"
   exec "$FM" -left "$leftfile" -right "$rightfile" \
        -ancestor "$leftfile" -merge "$mergefile"
else
        exec "$FM" -left "$leftfile" -right "$rightfile"
fi

http://soft.vub.ac.be/svn-gen/bdefrain/fmscripts/fmdiff3

[[ "$mergefile" == */* ]] || mergefile="./$mergefile"
tempfile=`mktemp -t $FMDIFF`
"$FM" -left "$leftfile" -right "$rightfile" \
      -ancestor "$ancestorfile" -merge "$mergefile"


===========================================================================================
Kaleidoscope  (Mac)


Graphical client
Uses 'Versions' as dedicated svn client

http://www.kaleidoscopeapp.com/

   diff-cmd = ksdiff
   merge-tool-cmd = ksdiff

Black pixel support kindly sent me the ksdiff help page:

usage: ksdiff - send files to Kaleidoscope
  --version                             show version information and exit
  -h, --help                            show this help message and exit

  --supports-capability CAPABILITY      prints YES if CAPABILITY is supported,
                                        otherwise prints NO. the capabilities
                                        this version of ksdiff supports are:
                                        partial-changesets-v1
                                        changesets-v1
                                        diffs-v1
                                        merges-v1

command options:                        
  [--wait, -w | --no-wait]              whether to wait for the document to be
                                        closed in Kaleidoscope before exiting
  [--label LABEL]                       use LABEL as the visible label for the 

FILE options:
  [--snapshot | --no-snapshot]          whether the file is temporary. this
                                        option will override the heuristics
                                        ksdiff would otherwise use to determine
                                        this state.

commands:
  --partial-changeset                   send part of a changeset
                                        implies --no-wait
    [--UUID UUID]                       use UUID to select which document to
                                        add this changeset item to; follow this
                                        with --mark-changeset-as-closed UUID
                                        to tell Kaleidoscope that no more
                                        changes are expected. if unspecified,
                                        Kaleidoscope will watch the process
                                        calling ksdiff and close the changeset
                                        when it exits.
    [--relative-path PATH]              use PATH to describe the filename and
                                        location for this changeset item within
                                        its root (e.g. a source repository)
    FILE FILE                           the files to diff

  --mark-changeset-as-closed UUID       marks the partial changeset submitted
                                        under the given UUID as being closed

  --changeset                           send a complete changeset
                                        implies --no-wait
    --filelist                          begin a file list (changeset item)
      [--relative-path PATH]            use PATH to describe the filename and
                                        location for this changeset item within
                                        its root (e.g. a source repository)
      FILE FILE                         the files to diff

  --merge                               send a merge
                                        implies --wait
    --output OUTPUT                     use OUTPUT as the destination path for
                                        this merge. creates OUTPUT if it does
                                        not exist.
    [--base BASE]                       use BASE as the base content for this
                                        merge. can improve the quality of the
                                        default selections for some merges.
    FILE FILE                           the files to merge

  [--diff]                              send a diff
                                        implies --no-wait
    FILE [...]                          the files to diff


===========================================================================================
p4Merge (windows/unix/mac/linux)


Graphical client

http://www.perforce.com/perforce/doc.current/manuals/cmdref/diff.html#1040665

p4 [g-opts] diff [-dflags -f -m max -sa -sb -sd -se -sr -sl -t] [file[rev#]...]

(see manual page above for details on switches)


===========================================================================================
Meld (Linux, Os X, Windows)


http://meldmerge.org/


http://www.rapidsvn.org/index.php/OnlineHelp:Contents#Meld_Setup_for_Use_as_Merge_Tool

 Meld Setup for Use as Merge Tool

 This is the commandline argument:

 "%2" "%4" "%3"


http://justcheckingonall.wordpress.com/2011/03/10/svn-diff-linux/

  /usr/bin/svnmeld containing:

  #!/bin/bash
  meld "$6" "$7"

  then chmod it as executable, and use diff-cmd = svnmeld in your SVN config file.

  $svn diff MyFile.txt --diff-cmd meld


===========================================================================================

Guiffy (windows/Mac/Linux)


Graphical client

http://www.guiffy.com/

The Guiffy Eclipse plugin and the Guiffy NetBeans plugin performs file
or folder compares, 3-way auto merges and also integrates with CVS and
SVN.

svn diff --diff-cmd <path to Guiffy SVN diff script> <path or file name> 

#!/bin/bash

# Configure path to guiffy here
GUIFFY=~/guiffy

# Subversion provides the paths we need as the sixth and seventh parameters.
# The left file will actually get expanded to the local pristine file stored
# by svn. The right file is the locally modified copy. Interchange these if
# you want to view it the other way in guiffy.
LEFT=${6}
RIGHT=${7}

# Call guiffy to open its diff window to view diff and review changes
$GUIFFY $LEFT $RIGHT

# Now, svn expects to be returned an errorcode of 0 if no differences were
# detected, 1 if some were. Any other errorcode will be treated as fatal.
# Note: whether differences were found, or not found -- guiffy always
# returns 0, so we will return 0 to svn and end at that. Returning anything
# apart from 0 or 1 tells svn something fatal happened so it will stop
# invoking guiffy after first file.
exit 0

http://www.guiffy.com/help/GuiffyHelp/GuiffyCmd.html

To specify filenames including blanks, encapsulate the filename with double quotes.
To specify a UNC for a filename, use \\\\servername for the usual \\servername.
The guiffy command line interface executable on Windows is the installed file guiffy.exe
The guiffy command line interface executable on MacOS X is the installed file guiffyCL.command
The guiffy command line interface executable on Linux and Unix is the installed shell script guiffy

Usage:
Just starts Guiffy:
guiffy [-options]
To compare files:
guiffy [-options] <1st file> <2nd file>
To compare folders:
guiffy [-options] <1st folder> <2nd folder> [parent folder] [result folder]
Note: optional parent and result folder used when launching 3-way merge from folder compare.
To Merge(2-way):
guiffy -m [-options] <1st file> <2nd file> [result file]
To SureMerge(3-way):
guiffy -s [-options] <1st file> <2nd file> <parent file> [result file]
To Automatically Save a compare as HTML:
guiffy -ahfileset.html [-options] <1st file> <2nd file>

(list of options at the link above)

Comment: Seeing this I'm wondering if we should allow more than one 
definition in the config file, which can be changed with a switch,  
and viewed on request (since everyone is forgetful at times)
Also, does giving the option on the command line override the 
definition in the config file right now?

===========================================================================================
Roaring Diff  (Mac)


Graphical client

http://www.biscade.com/tools/diff/
Using with 'svn' command line
You can point svn to RoaringDiff manually every time you run svn diff:

$ svn diff --diff-cmd /Applications/RoaringDiff.app/Contents/MacOS/RoaringDiff
This becomes tedious quickly. If you plan to use RoaringDiff for most of your 
diffing, edit ~/.subversion/config and change diff-cmd in that file:

### Set diff-cmd to the absolute path of your 'diff' program. 
### This will override the compile-time default, which is to use 
### Subversion's internal diff implementation. 
# diff-cmd = diff_program (diff, gdiff, etc.) diff-cmd = /Applications/RoaringDiff.app/Contents/MacOS/RoaringDiff
To use the regular GNU diff from time to time when diff-cmd is set, you can run:

$ svn diff --diff-cmd diff 


===========================================================================================
tkdiff (linux)

Graphical client

man page: http://linux.math.tifr.res.in/manuals/man/tkdiff.html

SYNOPSIS
tkdiff to interactively pick files.

tkdiff <file1> <file2> to compare two files.

tkdiff -conflict <file> to merge a file with conflict markers generated by 
"merge" or "cvs", The file is split into two temporary files which you can 
then merge as usual.

tkdiff <file> to compare <file> with the most recent version checked into 
CVS/SCCS/RCS (checked for in that order).

tkdiff -r <file> to compare <file> with the most recent version checked in.

tkdiff -r<rev> <file> to compare <file> with revision <rev> of <file>.

tkdiff -r<rev> -r <file> to compare revision <rev> of <file> with the most 
recent version checked in.

tkdiff -r<rev1> -r<rev2> <file> to compare revisions <rev1> and <rev2> of <file>. 

http://www.biscade.com/2012/06/svn-diff-wrapper-for-diff1-and-tkdiff/

#!/bin/bash
#
# Script to enable 'svn diff' as a GUI diff in X11 or a CLI diff
# on the command line (or if stdout is redirected).
#
# I couldn't get tkdiff to take a -geometry argument. I ended up
# setting my geometry in tkdiff's opts dictionary.
#
# Arguments coming in from svn diff:
#
# -u -L src/hello.cpp (revision 1234) -L src/hello.cpp (working copy) src/.svn/text-base/hello.cpp.svn-base src/hello.cpp
#

dash_u=$1
label1="$2 $3"
label2="$4 $5"
file1="$6"
file2="$7"
# echo "Comparing _$6_ and _$7_"
cmd=diff
if [ -t 1 -a -n "$DISPLAY" ]; then
    cmd=tkdiff
fi

$cmd "$label1" "$label2" "$file1" "$file2" 
RC=$?

exit $RC


===========================================================================================
DiffFork (Mac)


Graphical client

From the manual, http://www.dotfork.com/difffork/tutorial/

    Create a Python shell script svndfdiff.py with the following content (replace 
FULLPATH with your full difffork path):

         #!/usr/bin/env python
         import sys
         import os

         # Configure your favorite diff program here.
         DIFF = "FULLPATH"

         # Subversion provides the paths we need as the last two parameters.
         LEFT  = sys.argv[-2]
         RIGHT = sys.argv[-1]

         # Call the diff command (change the following line to make sense for
         # your diff program).
         cmd = [DIFF, LEFT, RIGHT, '-w']
         os.execv(cmd[0], cmd)

         # Return an errorcode of 0 if no differences were detected, 1 if some were.
         # Any other errorcode will be treated as fatal.

      

    In your Subversion working directory, type:

         svn diff --diff-cmd svndfdiff.py 
      

===========================================================================================
BeyondCompare (Windows, Linux)


Graphical client

http://www.scootersoftware.com/

http://www.scootersoftware.com/support.php?zz=kb_vcs

Windows
-------

Diff

    Go into the Beyond Compare installation folder (eg, C:\Program Files\Beyond Compare 3).
    Create a batch file named "bc3svn.bat" with one line:
      "C:\Progra~1\Beyond~1\bcomp.exe" "%6" /title1=%3 "%7" /title2=%5
    Go into Subversion's per-user configuration area, typically C:\Documents and Settings\<username>\Application Data\Subversion.
    Edit "config" and change the following lines:
      # [helpers]
      # diff-cmd = diff_program (diff, gdiff, etc.)
    to:
      [helpers]
      diff-cmd = C:\Progra~1\Beyond~1\bc3svn.bat 

Merge (v3 Pro)

    Go into the Beyond Compare installation folder (eg, C:\Program Files\Beyond Compare 3).
    Create a batch file named "bc3mer.bat" with one line:
      "C:\Progra~1\Beyond~1\bcomp.exe" "%2" "%3" "%1" "%4"
    Go into Subversion's per-user configuration area, typically C:\Documents and Settings\<username>\Application Data\Subversion.
    Edit "config" and change the following lines:
      # [helpers]
      # merge-tool-cmd = merge_program
    to:
      [helpers]
      merge-tool-cmd = C:\Progra~1\Beyond~1\bc3mer.bat 

Cygwin (http://www.cygwin.com/)

Instead of using a batch file, create a file named "bc.sh" with the following line:
"$(cygpath 'C:\Progra~1\Beyond~1\bcomp.exe')" `cygpath -w "$6"` `cygpath -w "$7"` /title1="$3" /title2="$5" /readonly

Linux
-----
Diff:

Create a file named /usr/bin/bcdiff.sh with the following line:
/usr/bin/bcompare "$6" "$7" -title1="$3" -title2="\"$5\"" -readonly
exit 0

Edit "$HOME/.subversion/config" and add the line "diff-cmd = /usr/bin/bcdiff.sh".

Merge:

Create a file named /usr/bin/bcmerge.sh with the following line:
/usr/bin/bcompare "$2" "$3" "$1" "$4"

Edit "$HOME/.subversion/config" and add the line "merge-tool-cmd = /usr/bin/bcmerge.sh"


===========================================================================================
WinMerge (Windows)


Graphical client

http://winmerge.org/

No mention in the manual, however, I found this:

http://stackoverflow.com/questions/569270/change-default-svn-diffing-tool

svn diff --diff-cmd wm [optional-filename]


===========================================================================================
Colordiff (Linux)

perl script for command line, to colorize output.

http://www.colordiff.org/

http://blog.tersmitten.nl/how-to-display-the-differences-between-two-revisions-of-a-file-in-svn.html
svn diff --diff-cmd diff -x -uw -r REV1:REV2 FILE | colordiff;

===========================================================================================

Kaleidoscope (OS X)

Graphical diff and merge tool for OS X.

http://www.kaleidoscopeapp.com/

Instructions for use with Subversion are built into the GUI (Kaleidoscope menu, Integration...):

Basic gist is ~/.subversion/config:
[helpers]
diff-cmd = ksdiff
merge-tool-cmd = ksdiff

or

svn diff --diff-cmd=ksdiff /path/to/working_copy

output of ksdiff --help follows:
usage: ksdiff - send files to Kaleidoscope
  --version                             show version information and exit
  -h, --help                            show this help message and exit

  --supports-capability CAPABILITY      prints YES if CAPABILITY is supported,
                                        otherwise prints NO. the capabilities
                                        this version of ksdiff supports are:
                                        partial-changesets-v1
                                        changesets-v1
                                        diffs-v1
                                        merges-v1

command options:
  [--wait, -w | --no-wait]              whether to wait for the document to be
                                        closed in Kaleidoscope before exiting
  [--label LABEL]                       use LABEL as the visible label for the

FILE options:
  [--snapshot | --no-snapshot]          whether the file is temporary. this
                                        option will override the heuristics
                                        ksdiff would otherwise use to determine
                                        this state.

commands:
  --partial-changeset                   send part of a changeset
                                        implies --no-wait
    [--UUID UUID]                       use UUID to select which document to
                                        add this changeset item to; follow this
                                        with --mark-changeset-as-closed UUID
                                        to tell Kaleidoscope that no more
                                        changes are expected. if unspecified,
                                        Kaleidoscope will watch the process
                                        calling ksdiff and close the changeset
                                        when it exits.
    [--relative-path PATH]              use PATH to describe the filename and
                                        location for this changeset item within
                                        its root (e.g. a source repository)
    FILE FILE                           the files to diff

  --mark-changeset-as-closed UUID       marks the partial changeset submitted
                                        under the given UUID as being closed

  --changeset                           send a complete changeset
                                        implies --no-wait
    --filelist                          begin a file list (changeset item)
      [--relative-path PATH]            use PATH to describe the filename and
                                        location for this changeset item within
                                        its root (e.g. a source repository)
      FILE FILE                         the files to diff

  --merge                               send a merge
                                        implies --wait
    --output OUTPUT                     use OUTPUT as the destination path for
                                        this merge. creates OUTPUT if it does
                                        not exist.
    [--base BASE]                       use BASE as the base content for this
                                        merge. can improve the quality of the
                                        default selections for some merges.
    FILE FILE                           the files to merge

  [--diff]                              send a diff
                                        implies --no-wait
    FILE [...]                          the files to diff