【问题标题】:Using Visual Studio 2012's built-in merge tool with Git将 Visual Studio 2012 的内置合并工具与 Git 结合使用
【发布时间】:2020-12-16 19:37:24
【问题描述】:

所以,我不知道是否有人注意到了,但是与 VS2012 一起打包的新合并工具是最大的病态。我最近转移到 Git 进行源代码控制,并且真的希望能够将 VS2012 设置为我的默认 difftool/mergetool。

关于如何做到这一点的任何建议?如果可能的话,我宁愿在活动的 VS2012 窗口中启动差异/合并,而不是新实例。

【问题讨论】:

  • AFAIK,TFS 合并工具是一种双向合并工具,这意味着它只会合并两个文件。 Git 需要一个三向合并工具(第三个文件是其他两个文件的基本祖先)​​。所以我目前最好的猜测是这是不可能的。
  • git merge using the vs2012 diff tool 的可能重复项 不完全重复,但可能值得将这些问题结合起来。
  • 你见过最新的VS与Git的集成吗?如果您使用 VS 作为 IDE,这对您来说应该非常方便。 blogs.msdn.com/b/visualstudioalm/archive/2013/01/30/…
  • @allen 只是想添加这个:blogs.msdn.com/b/bharry/archive/2013/01/30/git-init-vs.aspx。也许添加这些链接作为答案有助于突出这个不错的选择。
  • 安装了这个,这就是我所希望的一切!优秀的答案。但无法评价它,因为它是作为评论而不是答案添加的。

标签: git merge diff visual-studio-2012 git-extensions


【解决方案1】:

This article 解释了如何做到这一点。我试过了,它有效。在我的使用中,差异是在任何现有的 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 命令提示符快捷方式或手动调用 @987654324 @):

[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'”
  • 这是迄今为止最好的答案——唯一的问题是它似乎对我不起作用!我在提示后按了返回,没有任何反应... git 询问我合并是否成功,因为文件未更改...
  • @jessehouwing 您是否每天都使用 Visual Studio 命令提示符?我大概每两年打开一次。
  • @AdamDrewery 我遇到了像你这样的问题。就我而言,事实证明我已将 Visual Studio 配置为以管理员身份运行,并且我试图从非提升的命令提示符启动 vsdiffmerge。我的猜测是 vsdiffmerge 正在启动 devenv,当它试图提升到管理员时它默默地失败了。如果我从管理员命令提示符启动它,它对我有用。
  • 我对“$LOCAL”和“$REMOTE$ 感到困惑,特别是因为它们在 difftool 和 mergetool 中的顺序不同。有人可以启发我吗?
【解决方案2】:

如果您将 Git Source Control Provider 与 Visual Studio 一起使用,则看起来 this feature 已实现并且从 1.0.0 版开始可用。

或者如果你开始使用Microsoft'stools for git,那也将使用内置的差异工具。从一些screenshots 看来,它会进行 2 路合并,结果在底部。

【讨论】:

  • 是的,它是一个三向合并工具。三道中的“三”是指比较三个组成部分:两个分支侧面与祖先相比。合并输出在 UI 中绘制的位置毫无意义。但即使这很重要,您也可以单击三窗格按钮将合并结果放在中间。
【解决方案3】:

标记为已回答的解决方案对我不起作用,但确实如此(我的路径中有 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

【讨论】:

    【解决方案4】:

    在 Visual Studio 2019 中,您只需转到工具 -> 源代码管理 -> Git 全局设置 -> 工具部分,然后对差异工具、合并工具或两者都使用“使用 Visual Studio”,即可轻松做到这一点

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 2019-09-27
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多