joeferraro/MavensMate — pull request #21 by doublesharp (2013-05-11 17:22:40+00:00)
Title: Patch conflict synchronize merge

**Server Conflict Checking**
* When a metadata is refreshed or saved the ```fileProperties``` array that is returned with the package is now being cached to ```/config/.apex_file_properties```, keyed on the metadata file name without path information. An example of an entry is below.
* When the ```mm_compile_check_conflicts``` setting is set to ```true```, MavensMate call ```retrieve()``` on the metadata being compiled, and compare the ```lastModifiedDate``` from the response to the cached file properties. If they don't match the compile is cancelled, and the Apex file property is marked as in conflict.
* When a file is in conflict, there is a context option to "Mark as Merged" which will fetch the latest Apex file properties from the server, overwriting your current values - this means that the ```conflict``` marker is gone and the ```lastModifiedDate``` matches the server, so the next compile will complete.

**Synchronize using DiffMerge**
* Synchronizing relies on DiffMerge (at least for now). You can download it [here](http://www.sourcegear.com/diffmerge/), put it in ```/Applications```
* To compare a file or directory to the server, you there is a context menu that says "Synchronize with Server"
* The selected metadata is fetched from the server using ```retrieve()```, copied to a temporary file/folder, and then compared to the proper item in ```/src/``` using DiffMerge. You may copy changes from the server to you local file, at which point you can mark as merge (if necessary) and save.