Change default SVN diffing tool
Solution 1
Ok, looking at the original blog post, this is what you want:
svn diff --diff-cmd wm [optional-filename]
If you want to see what is actually happening here (i.e. what sort of parameters the svn diff
passes to the nominated diff-cmd
), you can just use svn diff --diff-cmd echo
and see what it says:
[~/src/gosmore-dev]$ svn diff --diff-cmd echo
Index: gosmore.cpp
===================================================================
-u -L gosmore.cpp (revision 13753) -L gosmore.cpp (working copy) .svn/text-base/gosmore.cpp.svn-base gosmore.cpp
Some quotes were removed above, but basically you can see that svn diff
will pass
-u -L "<left-label>" -L "<right-label>" <left-file> <right-file>
to your batch file. The batch file you have is used to turn these commands into the format that WinMerge understands.
More details and examples on how this all works are provided in the svn book.
To make your batch file the default for svn diff
, you need to add the following line in the [helpers]
section in your local subversion config file (~/.subversion/config
in Linux, I'm not sure where the config file is located in Windows) (see this earlier SO question)
diff-cmd=wm.bat
Solution 2
Check out this link:
http://blog.tplus1.com/index.php/2007/08/29/how-to-use-vimdiff-as-the-subversion-diff-tool/
Here is a copy for SOer's convienience:
Get this diffwrap.sh script and save it anywhere. I saved mine in my $HOME/bin directory. Make sure to make it executable! I’m showing it below:
#!/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
Then go diff a file!
Solution 3
After creating a batch file that contains a call to your favorite merge program, you can configure Subversion to always use your batch file in Windows (without requiring the --diff-cmd argument on each use) by modifying the line
# diff-cmd = diff_program (diff, gdiff, etc.)
in the file C:\Documents and Settings\username\Application Data\Subversion\config. This line should be changed to point to your batch file. For example:
diff-cmd = c:\bin\wm.bat
Solution 4
For Mac::
open this file : ~/.subversion/config
find and uncomment line containing : diff-cmd ( by removing # from start )
in front of diff-cmd, give the name of the diff tool, like in my case i was using araxis merge diff tool, so it looked like this :
diff-cmd=/Applications/Araxis Merge.app/Contents/Utilities/araxissvndiff
After this whenever you will run svn diff on terminal, if will show difference of the files in that tool
make sure there is no space before and after diff-cmd word.
Solution 5
Meld works really great for me. After installing, I went to the Subversion
config file, uncommented the diff-cmd
line and set it to the path when meld.exe is. In my case:
[helpers]
### ...
### 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 = D:\SOFT\Meld\meld\meld.exe
aleemb
I am a web development junkie and love the whole stack. SOreadytohelp
Updated on December 12, 2020Comments
-
aleemb over 3 years
Following a blog, I created a batch file, wm.bat:
"d:\svnroot\external\winmerge\WinMerge.exe" /B /WAIT "d:\svnroot\external\winmerge\WinMergeU.exe" /e /ub /dl %3 /dr %5 %6 %7
And I tried calling
svn diff | wm
but that didn't work. So how do I integrate WinMerge or similar utility with
svn diff
?Extending on David's answer below, changing the default for Windows requires editing the configuration file located at (for Windows XP)
C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config
or (Windows Vista)
C:\Users\%USERNAME%\AppData\Roaming\Subversion\config
-
Michael Venable over 12 yearsIn Windows 7, this path has changed to c:\Users\username\AppData\Roaming\Subversion
-
Santhosh about 8 yearsThe space doesn't matter though.
-
Michael Burr over 2 years+1 just for the suggestion of
svn diff --diff-cmd echo
. I don't understand why the svnbook doesn't tell you what all the arguments passed to the external diff are instead of only telling you that arguments 6 and 7 are the files to compare. Usingecho
to tell you what the hell is happening under the hood is one of those simple ideas that I consider brilliant.