使用Visual Studio 2012内置的合并工具与Git一起使用

30

所以,我不知道是否有人注意到,VS2012附带的新合并工具非常强大。我最近转向使用Git进行源代码控制,并真的想将VS2012设置为默认的diff工具/合并工具。

有什么建议吗?如果可能的话,我更希望在活动的VS2012窗口中启动差异/合并,而不是在新实例中打开。


据我所知,TFS合并工具是一种双向合并工具,这意味着它只会期望两个文件进行合并。Git需要一种三向合并工具(第三个文件是其他两个文件的基础祖先)。因此,我目前最好的猜测是这是不可能的。 - Sardaukar
可能是使用VS2012差异工具合并Git的分支的重复问题。虽然不完全相同,但可能值得将这些问题合并在一起。 - Roman
1
你看到了最新的VS与Git的集成吗?如果你使用VS作为你的IDE,这对你来说应该非常方便。http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/30/getting-started-with-git-in-visual-studio-and-team-foundation-service.aspx - allen
@allen 只是想补充一下:http://blogs.msdn.com/b/bharry/archive/2013/01/30/git-init-vs.aspx 。也许将这些链接作为答案添加可以帮助突出这个不错的选项。 - Grimace of Despair
安装了这个,它超出了我的期望!非常好的答案。但无法评分,因为它被添加为评论而不是答案。 - Adam Drewery
4个回答

77

本文解释了如何做到这一点。我尝试过并且有效。在我的使用中,差异会在任何一个现有的Visual Studio实例中打开,这是您所偏爱的。

[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

或者使用%VSINSTALLDIR%来始终引用与您打开的命令行匹配的Visual Studio版本(仅当已设置Visual Studio环境时,即通过使用Visual Studio命令提示快捷方式或手动调用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

将您的路径嵌套在单引号内,然后再嵌套在双引号内,这样可以保留括号。例如:"'C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\vsdiffmerge.exe'" - Ken
这是目前为止最好的答案-唯一的问题是它似乎对我不起作用!在提示后我按回车键,却什么也没发生...git会问我合并是否成功,因为文件没有改变... - Adam Drewery
2
@jessehouwing 您是否每天都使用Visual Studio命令提示符?我可能每两年才打开一次。 - FarFigNewton
2
@AdamDrewery 我曾经遇到过和你一样的问题。在我的情况下,我发现Visual Studio被配置为以管理员身份运行,而我正在尝试从非提升的命令提示符中启动vsdiffmerge。我的猜测是vsdiffmerge正在启动devenv,并且当它尝试提升到管理员时,它会悄悄地失败。如果我从管理员命令提示符中启动它,那么它对我来说就可以工作了。 - MichaC
2
我对"$LOCAL"和"$REMOTE"感到困惑,尤其是它们在difftool和mergetool中的顺序不同。能否有人给我讲解一下? - PhilLab
显示剩余8条评论

13

是的,这是一个三路合并工具。 "三路" 指的是比较三个组件:将两个分支与祖先进行比较。在 UI 中绘制合并输出的位置无意义。但即使如此重要,您也可以单击三面板按钮使合并结果位于中间。 - Edward Thomson

1

被标记为答案的解决方案对我没有用,但是这个方法可以(我将vsdiffmerge.exe的位置加入了路径 - 不知道是否有关):

[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

0
在Visual Studio 2019中,你可以通过简单地转到“工具”->“源代码控制”->“Git全局设置”->“工具”部分,然后选择“使用Visual Studio”作为Diff工具、合并工具或两者都使用来轻松完成这个操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接