windowsgitmsysgitmergetoolsemantic-merge

Git mergetool on Windows keeps being given filepath from Git install rather than repository root


I want to use SemanticMerge as my mergetool in Git, but when I try to perform a merge, I get a complaint from SemanticMerge saying that it cannot locate the file C:\Program Files (x86)\Git\my_repo_name\my_project\MyFile.cs.BASE.1234.cs - which is absolutely correct as it should be at C:\repositories\my_repo_name\my_project\MyFile.cs and so on. For some reason although Git is working with the repositories in every other respect, it seems to be determined to pass the $BASE, $LOCAL and $REMOTE file paths with the Git install path prepended instead of the repository root.

I have been using the configuration suggested in their own tutorial as a starting point for this and the tool seems to work fine if given the correct paths, so I am guessing that somewhere between Git and MsysGit, there is some misconfiguration or miscommunication.


Solution

  • I'm not sure if the SemanticMerge configuration is your issue, but if it is, you can try using these settings. I have it working on my work machine, but these are my personal machine settings, so they might not have been updated yet. These settings are for msysgit on Windows 7 by the way:

    [mergetool "sm"]
        keepBackup = false
        trustExitCode = false
        cmd = 'C:/Users/<user>/AppData/Local/PlasticSCM4/semanticmerge/semanticmergetool.exe' -b=\"$BASE\" -d=\"$LOCAL\" -s=\"$REMOTE\" -r=\"$MERGED\" -l=csharp -emt=\"mergetool.exe -b=\"\"@basefile\"\" -bn=\"\"@basesymbolic\"\" -s=\"\"@sourcefile\"\" -sn=\"\"@sourcesymbolic\"\" -d=\"\"@destinationfile\"\" -dn=\"\"@destinationsymbolic\"\" -r=\"\"@output\"\" -t=\"\"@filetype\"\" -i=\"\"@comparationmethod\"\" -e=\"\"@fileencoding\"\"\" -edt=\"mergetool.exe  -s=\"\"@sourcefile\"\" -sn=\"\"@sourcesymbolic\"\" -d=\"\"@destinationfile\"\" -dn=\"\"@destinationsymbolic\"\" -t=\"\"@filetype\"\" -i=\"\"@comparationmethod\"\" -e=\"\"@fileencoding\"\"\"