Using Visual Studio 2012's built-in merge tool with Git

So, I don’t know if anyone’s noticed but the new Merge Tool packaged with VS2012 is sick-o to the max. I’ve recently moved to Git for my source control and really want to be able to set up VS2012 as my default difftool/mergetool.

Any suggestions as to how to do this? I’d rather the diff/merge is started in the active VS2012 window and not a new instance if possible.

  • Mercurial equivalent of git whatchanged?
  • How exactly does subversion store files in the repository?
  • Modifying Git Diff files
  • How to Diff Files Directly from the Linux Kernel GIT Repository?
  • Gettext .po files under version control
  • Set git diff to a default value
  • Should I git merge develop into master and then back after tagging?
  • gitweb; hide specific repos
  • Is there a plumbing command to create tag object?
  • When pushing app to heroku: “fatal: Not a git repository”, plus suspected Gemfile changes
  • git log shows only the most recent revision of a file
  • Source Forge repo gives “denying non-fast-forward refs/heads/master” error
  • 3 Solutions collect form web for “Using Visual Studio 2012's built-in merge tool with Git”

    If you are using Git Source Control Provider with Visual Studio, it looks like this feature was implemented and is available as of version 1.0.0.

    Or if you start using Microsoft’s tools for git, that will also use the built-in diff tool. From some of the screenshots, it looks like it’ll 2-way merge, with the result at the bottom.

    This article explains how to do this. I tried this out and it works. In my usage, the diff was opened in any existing instance of Visual Studio, which is what you preferred.

    [diff]
        tool = vsdiffmerge
    [difftool]
          prompt = false
    [difftool "vsdiffmerge"]
          cmd = '"C:/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE/vsdiffmerge.exe"' "$LOCAL" "$REMOTE" //t
          keepbackup = false
          trustexitcode = true
    [merge]
          tool = vsdiffmerge
    [mergetool]
          prompt = false
    [mergetool "vsdiffmerge"]
          cmd = '"C:/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE/vsdiffmerge.exe"' "$REMOTE" "$LOCAL" "$BASE" "$MERGED" //m
          keepbackup = false
          trustexitcode = true
    

    Or use %VSINSTALLDIR% to always reference the version of Visual Studio that matches the commandline you have opened (this only works when the Visual Studio environment has been setup, either by using the Visual Studio Command Prompt shortcut or manually calling vsvars32.bat):

    [diff]
        tool = vsdiffmerge
    [difftool]
          prompt = false
    [difftool "vsdiffmerge"]
          cmd = '"%VSINSTALLDIR%Common7/IDE/vsdiffmerge.exe"' "$LOCAL" "$REMOTE" //t
          keepbackup = false
          trustexitcode = true
    [merge]
          tool = vsdiffmerge
    [mergetool]
          prompt = false
    [mergetool "vsdiffmerge"]
          cmd = '"%VSINSTALLDIR%Common7/IDE/vsdiffmerge.exe"' "$LOCAL" "$REMOTE" "$BASE" "$MERGED" //m
          keepbackup = false
          trustexitcode = true
    

    Te solution marked as answered did not work for me, but this did (I had the vsdiffmerge.exe location in my path – don’t know if it had anything to with it):

    [diff]
        tool = vsdiffmerge
        guitool = vsdiffmerge
    [difftool]
        prompt = true
    [difftool "vsdiffmerge"]
        cmd = $LOCAL $REMOTE /t
        keepbackup = false
        trustexistcode = true
        path = C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/vsDiffMerge.exe
    [merge]
        tool = vsdiffmerge
    [mergetool]
        prompt = false
    [mergetool "vsdiffmerge"]
        cmd = $REMOTE $LOCAL $BASE $MERGED /m
        keepbackup = false
        trustexitcode = true
        path = C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/vsDiffMerge.exe
    
    Git Baby is a git and github fan, let's start git clone.