A project we’re working on at work is in a phase of a lot of refactoring’s. the base functionality seems to be working fine, we’re now taking care of better fault handling, better logging, better messaging, …

That includes a lot of refactoring’s, moving methods, adding log messages, updating methods in a team of 3 developers. That results in a lot of merge errors as we more then once make changes to the same files in the project.

The default text merge tool can’t handle these changes and more then once we’ve been fouling around for over an hour to get the files back to a ‘working’ state.

No SVN documentation

We still work with SVN for our internal projects. For my personal projects I’m hooked up to git in combination with GitHub as you probably can see in the different topics I blogged about before.

The guys from Semanticmerge placed some documentation how to configure the merge tool for git, TFS and Plastic SCM but they didn’t include documentation about configuring TortoiseSVN (the tool we are using).

Setting Tortoise SVN options

First start with downloading the beta of the Semanticmerge tool and install it on your system. You’ll need the location where you installed the tool, note it during installation or you’re going to have to search your system for the executable needed in the next step.

In TortoiseSVN you can set the merge tool you want to use (default TortoiseMerge), this we’ll have to change to the semanticmerge tool. Right click on a folder and choose for ‘TortoiseSVN’ and then ‘Settings’.

In the settings screen go to ‘External Programs’ – ‘Merge Tool’. There you can set the path to the semanticmergetool.exe.

If you would try to merge now you’ll get an error message. The tool will be started but it doesn’t know witch files he have to merge. Those parameters will we have to add after the path to the executable.

I then committed the file back to the server. On my machine I also changed the same file. I’ve added a test class under the existing class and added some dummy code to the second method (that is still the second method in row).

Conclusion

At first sight (the merged class wasn’t that difficult) the tool does what it has to do. I’m going to start using it on our project now and will see if some more complex merges will have the same result.

One of the problems I’m still facing is that for SVN the file doesn’t seems to be resolved automatically. I still have to find the file and right click and choose ‘resolved’. Or you can do that on a checkin but then you have to remember witch files you’ll already merged.

It can be it’s another parameter you’ll have to add to the command line expression but I couldn’t find any documentation.

DISCLAIMER: The configuration seems to be working on my system. I’m not 100% sure it’s the correct configuration. Use it on your own risk!

Post navigation

10 thoughts on “New merge tool Semanticmerge, tested on SVN”

Conflicts are not yet resolved automatically because we prefer to get people used to SemanticMerge before… but it would be very, very easy to activate. In fact we didn’t do it so far on purpose, because all the tests pass with full automation 🙂

You could follow an example given by the BeyondCompare guys to automatically mark the file as resolved. Essentially, you have Tortise call a VB script which launches the merge tool and then once the merge tool exits it issues another command to Tortise to resolve the file.

I have found that using the above configuration causes SemanticMerge to hang for a while when you try to merge a non-C# file. I would recommend leaving out the “-l=csharp” option from the merge configuration for this reason. Then SemanticMerge can decide on its own what the language is for the file based on the file extension, and either open the SemanticMerge proper or just open the text-based merge program for languages it doesn’t support. I personally also add in the ” –nolangwarn” to remove the pesky dialog box when SemanticMerge doesn’t support the language for the file.