Tuesday, September 18, 2007

Diff / Merge Tools

I've been using TortoiseMerge (part of TortoiseSVN) for a while now to view my source's diff's as well as handling merge conflicts. Something about it though has always felt 'clunky' to me. It may just be it's default color scheme that causes my mental detraction, but when I saw Larkware plug something call DiffMerge 3.1 beta I figured I should give it a try.

So far, I like it. It's UI is more sexy, as far as I'm concerned. It supports 3-way merging (like TortoiseMerge), making life so much easier when resolving merge conflicts. It supposedly supports folder diff/merging, although I haven't tried that yet.

I just wish I hadn't also accidentally stumbled upon another free diff/merge tool called KDiff3. I like KDiff3's shell context menu for it's ability to 'remember' a file's location on the file system. Once a file is 'remembered', you can perform a diff on any other file on the system by asking KDiff3 to compare the current file you have in front of you, and one of the 'remembered' files from earlier. (I've found myself needing to do this lately and KDiff3 definitely speeds up the process.)

One other thing I liked about KDiff3 was in it's installer: It provided an install option to integrate with TortoiseSVN as Tortoise's primary diff/merge tool.

The only problem with KDiff3 was, it's color scheme made me throw up in my mouth so fast that I quickly decided I had to give DiffMerge another shot. (The screenshot shown here doesn't truly show off the vomit-in-mouth colors so much...) KDiff's ability to integrate easily with TortoiseSVN got me looking into how to set DiffMerge as my Tortoise diff/merge tool.

Being perpetually low on free time, and not wanting to figure out the command line options myself, I enlisted Google to give me answers. In my search for integrating DiffMerge as my TortoiseSVN diff/merge tool, I ran into this post by 'Trumpi' detailing exactly how to integrate the two! So, instead of outright stealing from Trumpi, I give you: Trumpi's blog : SourceGear release DiffMerge.

Ok, I'll steal a little, only because I tweaked my settings slightly for the diff-tool specification (caught the tweak in Trumpi's post comments). Here's the command lines for specifying DiffMerge as your diff and merge tools for TortoiseSVN:
  • Diff:
    • New way: (see comments)
      C:\Program Files\SourceGear\DiffMerge\DiffMerge.exe /ro2 /t1=%bname /t2=%yname %base %mine
    • Old way:
      C:\Program Files\SourceGear\DiffMerge\DiffMerge.exe /t1=Base /t2=Mine %base %mine

  • Merge:
    • New Way: (see comments)
      C:\Program Files\SourceGear\DiffMerge\DiffMerge.exe /r=%merged /t1=%yname /t2=%bname /t3=%tname /c=%mname %mine %base %theirs
    • Old Way:
      C:\Program Files\SourceGear\DiffMerge\DiffMerge.exe /t1=Mine /t2=Base /t3=Theirs /r=%merged %mine %base %theirs


Note on the updated TortoiseSVN external tool commands: In the comments, Travis mentioned that I should RTFM. Upon inspecting the DiffMerge manual, I came up with the updated command lines above. I especially appreciate the "/ro2" option for the diff-tool. This makes DiffMerge act strictly like a diff-tool (ie: no editing allowed.)

Also, I gave Jimmy's WinMerge a try. It does fit my 'eye-candy' requirement, but I just can't devote more time to it because of it's lack of 3-way merging.


James said...

I've been using WinMerge but I've only been using it against StarTeam. It has the commandline support to allow you to integrate it with TortoiseSVN.

I can't speak to the merge capabilities though...since my work only needs me to see the changes not actually merge them.

Jason Poll said...

Hey, thanks, I'll grab it and give it a try some time...but without handy-dandy 3-way merging I'll probably have to back-burner it.

Travis said...

In the DiffMerge manual they offer different command line options for both the diff and the merge scenarios, specifically for integration with TortoiseSVN. Check out the manual in the "Integration with Third-Party Software" section.

Jason Poll said...

Oh no! I do believe I have just been RTFM'd. :D

Thanks for pointing this out, Travis. The manual does indeed have good command line specifics.

I've changed my external diff tool command line to:

path\to\diffmerge.exe /ro2 /t1=%bname /t2=%yname %base %mine

I've also changed my external merge tool command line to:

path\to\diffmerge.exe /r=%merged /t1=%yname /t2=%bname /t3=%tname /c=%mname %mine %base %theirs

Michael said...

If you haven't tried it yet, check out the Beyond Compare 3 beta. It's official release is slated for July, but I find the beta stable enough for general use.

Jason Poll said...

Cool, I'll have to give it a shot in the near future. It does go against my cheapskate-rule, however. Although, $30 for a license isn't bad.

Anonymous said...

I've just switched from using perforce with my old job to using subversion. That has a nice (free) diff/merge tool.

KH said...

Hi, I am in charge of marketing in DiffVue Software; DiffVue is the software we've developed over a few years, and last week we upgraded to the new version.

All the downloading thing can be done in http://www.diffvue.com, which is the main website for our company.

For your evaluation, I will send you the serial number via email once you reply to me.

I hope you can evaluate our software and publish your honest rating.

Thanks a lot.