Merge Smarter With Semantic Merge

Introduction

 
Any experienced developer at one time or another has encountered issues when merging their code and has been met with that nasty conflict icon. A new product from Plastic SCM called Semantic Merge is hoping to get rid of that little red guy once and for all by using a merge that actually attempts to understand the code that it is merging together. It’s built on top of Microsoft’s Roslyn, which if you are unfamiliar with, is going to be a game-changer in the future.
 
Semantic Merge doesn't care about the order that your code appears in because it actually understands what is going on within it (to an extent) and rather than focusing on the actual location of your code, it focuses on the structure and can actually determine if a change will actually affect functionality (within reason) and if it might just be an aesthetic change.
 
Although the product is still within its beta phase, it looks to become a really powerful tool in the future.
 
Features
 
Here are a few of the “highlights” that Semantic Merge currently offers:
  • Location Independent Merging: This feature basically ignores the location of your methods, which allows you to easily re-factor your code and move things around. It actually merges on a method-by-method basis as opposed to looking at the entire code-base as a text file like a traditional “diff” operation might.
     
  • Merge and Diff Visualization: Semantic Merge is an incredibly visual tool. This feature allows you to easily see a visual representation of your method at both its pre- and post-merge states which can be great if you are performing a major overhaul or refactoring lots of code.
     
  • Method-based Conflict Resolution: If two developers try to modify the same method in parallel and there isn't a collision, which can be a problem. But not with Semantic Merge, which will notify you of a conflict even if the text-block doesn't explicitly state that one exists.
     
  • Smarter Refactoring: If Developer A creates a class within an existing class and Developer B then moves the parent class to a different location, Semantic Merge can detect these changes and will ensure all of the code and its relocation resolves properly.
     
  • Semantic Diffing: An aptly named tool called Semantic Diff is included within Semantic Merge as well and it provides a very (once again) visual method of determining exactly what change within a section of code.
     
  • Language Support: It currently supports Java, Visual Basic, and C# (with planned support for Javascript, C, C++, PHP, Python, and Ruby).
You can read about more of these features and more detailed explanations (and visualizations) of each of them here.
 
Go Play With It.
 
semanticmerge
 
Semantic Merge takes a new approach to merging code and attempts to actually understand what is going on.
 
Since Semantic Merge is still currently in beta, you can head on over to Plastic SCM’s Semantic Merge site and download it: