【问题标题】:Command-line access to VS 2012 merge tool命令行访问 VS 2012 合并工具
【发布时间】:2013-06-20 11:42:45
【问题描述】:

我正在研究在 Windows 7 上使用 TFS 2012 作为 Matlab 的源代码控制提供程序。这需要安装 VS 2012 shell/TFS 客户端,以及可从 Microsoft 免费下载的 64 位 MSSCCI 提供程序。这一切我都设置好了,一切正常。

但是,文件差异和合并存在问题。如果我查看与 VS 2012 Source Control Explorer 的差异,则 VS 2012 Diff 工具运行正确。如果我在 Matlab 中尝试相同的操作(使用源代码控制菜单),我会收到错误“无法执行配置的工具”。解决冲突时,“合并工具中的合并更改”按钮也会发生同样的事情:在 VS 2012 中它可以工作,而在 Matlab 中却不行。

这似乎是一个已知问题,至少在其他试图驱动 TFS 的工具中是这样。有一个解决方法,即配置 VS 2012 以使用外部差异实用程序。我试过了,它奏效了。此外,我发现如果您将外部差异实用程序配置为 VS 2012 自己的“内部”差异工具,则可以从 Matlab 正确调用内部工具。

diff 命令是:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe

所需的参数是:

 /Diff %1 %2 %6 %7

(即原始文件、修改文件、原始文件标签、修改文件标签)。这个here有文档。

合并工具的问题更大。我在其命令行上找不到任何特定文档。到目前为止我最接近的是

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\vsDiffMerge.exe

我很确定这是对的,但我使用的论点

%1 %2 %1 %2 %3 %4 /m

不太对 - 文件标签不同,差异显示的格式也不同(来自普通的内置工具)。我从一些与 git 相关的文档 here 对这个命令行进行了逆向工程,但我对 git 一无所知,也不会说意大利语。谁能帮我找到要使用的正确命令行选项吗?

编辑添加

有一个 MSDN 讨论似乎与这个问题 here 有关。看起来它发生在其他工具上,并且不限于 Matlab:我已经相应地重新标记了这个问题

编辑添加

区分功能的首选命令行是:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\vsDiffMerge.exe

命令行参数是:

/t %1 %2 %6 %7

合并功能的等效功能不起作用:这是一个内部错误,Microsoft 已承认这一点。

【问题讨论】:

  • 您是否尝试设置外部差异工具?试试WinMerge 或类似的。
  • 是的。我已经尝试过 MKS Toolkit vdiff32.exe(其用户界面在 1999 年左右停留在某个地方)和 Tortoise Subversion 的等价物。两者都没有给人留下深刻的印象,而 VS 2012 合并工具实际上非常好......

标签: visual-studio-2012 tfs


【解决方案1】:

vsDiffMerge.exe 工具似乎适用于差异合并和三向合并。我成功地将 VS diff/merge 工具与 Perforce 客户端集成以进行合并和集成。

提供给工具的参数(至少对于 Perforce)是:


差异

vsDiffMerge.exe /t %1 %2

地点:

  • /t(在临时选项卡中打开,离开以在永久选项卡中打开)
  • %1(第一个文件)
  • %2(第二个文件)

合并:

vsDiffMerge.exe /m %1 %2 %b %r

地点:

  • /m(合并操作,不做差异)
  • %1(他们的/源文件)
  • %2(您的/目标文件)
  • %b(基本文件)
  • %r(结果文件)

注意:“%”解释来自 Perfore 文档:http://www.perforce.com/perforce/doc.current/manuals/p4v/Configuring_display_preferences.html#Diff

编辑:对不起大家,我不知道我是如何混淆的。通过我今天的测试,Mark Sowul 是完全正确的。我已经确定了我的答案。此外,很抱歉在发布第一条评论后没有立即纠正此问题。我刚从国外旅行回来。

【讨论】:

  • 合并语法顺序不正确。第一个参数被视为 SOURCE,而不是 base。您可以通过查看任务管理器中的命令行,然后单击合并工具中的“比较源代码与基代码”来确认这一点。这将导致不正确的合并!
  • 根据osnabrugge.wordpress.com/2013/10/22/… 它是 vsdiffmerge.exe" /m "File1" "File2" "FileThatServesAsBase" "FileThatServesasTarget" 我的测试似乎证实了这一点
  • 感谢您的回答!我将 VS 合并工具与 SourceTree 一起使用:C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\vsDiffMerge.exe /m "$LOCAL" "$REMOTE" "$BASE" "$MERGED"跨度>
  • 对于 Diff 命令,将参数 %6 %7 添加到命令以包含文件标签。见this MSDN question
【解决方案2】:

我找到了与合并选项一起出现的错误的解决方案。 我创建了应该用于合并文件的文件。 在我的评论中查看更多详细信息:http://www.codeproject.com/Articles/649736/Solving-the-resx-Merge-Problem-in-TFS?msg=4745473#xx4745473xx

【讨论】:

  • 文件.创建(合并);是我在使用 vsdiffmerge.exe 之前调用的代码。参数是用于参数 %r 的文件名。我想我不应该在这里写更多,因为在另一篇文章中问题有点不同。
猜你喜欢
  • 2014-05-25
  • 2010-10-12
  • 2012-09-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多