Visual Studio 和 vsDiffMerge 与 Mercurial 和 TortoiseHg






4.56/5 (5投票s)
通常,当我在 Visual Studio 中处理源代码控制项目时,我使用 Team Foundation Server (TFS)。 在我目前的雇主,我们使用 Mercurial,并且我们使用 TortoiseHg 与其交互。
通常,当我在 Visual Studio 中处理源代码控制项目时,我使用 Team Foundation Server (TFS)。 在我目前的雇主,我们使用 Mercurial,并且我们使用 TortoiseHg 与其交互。 对我来说,这似乎是一种脱节的体验,我一直在寻找将其深度集成的方法。 为此,我一直在使用 VisualHg 作为我在 Visual Studio 中的源代码控制提供程序,并且最近找到了一种使用 Visual Studio 作为来自 TortoiseHg 的 Diff 和 Merge 工具的方法。 我详细介绍了设置此过程的步骤,并编写了一个安装程序,该安装程序可以自动执行这些步骤。 我不会介绍设置或使用 VisualHg 的步骤,因为它自己的站点已经做得很好了。
您将需要什么
- Visual Studio(我使用 Visual Studio 2013 Ultimate)
- Mercurial
- TortoiseHg
- 文本编辑器(我使用 Sublime Text)
首先验证几件事
- 您应该在 Visual Studio IDE 目录中有一个名为 vsDiffMerge.exe 的文件,通常是“C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\vsDiffMerge.exe”。
- 您应该在用户目录中有一个名为 Mercurial.ini 的文件,通常是“C:\Users\%USERNAME%”或“%USERPROFILE%”。
- TortoiseHg 当前未运行。 如果您无法关闭 TortoiseHg,没关系,但需要在最后重新启动。
如果我们拥有所需的一切,并且已经验证了上面提到的几件事,那么我们就可以继续进行了。 我们将在 Mercurial.ini 和我们将要创建的新批处理文件中完成大部分工作。 批处理文件将处理调用 Visual Studio 组件,并为我们在 Mercurial.ini 中配置提供一个简单的路径。 因此,我们将从那里开始。
连接起来
打开文本编辑器并创建一个新文件。 将下面的批处理脚本代码复制到新文件中,然后将新文件另存为用户目录 (%USERPROFILE%) 中的 HgVsDiffMerge.bat。
@ECHO OFF IF "%1" == "/Diff" GOTO DIFF IF "%1" == "/Merge" GOTO MERGE EXIT :DIFF %COMSPEC% /C ""%VS120COMNTOOLS%VsDevCmd.bat" && devenv.exe /diff %2 %3" EXIT :MERGE %COMSPEC% /C ""%VS120COMNTOOLS%VsDevCmd.bat" && VsDiffMerge.exe /t /m %2 %3 %4 %5 EXIT
如果您使用的是 Visual Studio 2012,则将变量“VS120COMNTOOLS”更改为“VS110COMNTOOLS”,或者如果您使用的是 Visual Studio 2010,则将变量“VS120COMNTOOLS”更改为“VS100COMNTOOLS”。
现在,创建 Mercurial.ini 文件的备份副本。 如果您只是阅读了这一点而忽略了它,请停止并立即创建 Mercurial.ini 的备份副本。
现在在文本编辑器中打开 Mercurial.ini。 我们将重点关注其中的几个部分。 第一个部分(可能不存在)是“merge-tools”部分。 如果您没有“merge-tools”部分,您将创建一个。 在这里,我们告诉 Mercurial 和 TortoiseHg 关于我们之前创建的批处理脚本。 该部分应如下面的代码段所示。
[merge-tools] vsDiffMerge.executable=%UserProfile%\HgVsDiffMerge.bat vsDiffMerge.args=/Merge $local $other $base $output vsDiffMerge.priority=1 vsDiffMerge.premerge=True vsDiffMerge.gui=True vsDiffMerge.diffargs=/Diff $parent $child vsDiffMerge.dirdiff=True
现在 Mercurial 和 TortoiseHg 知道有一个名为 vsDiffMerge 的合并工具。 他们知道在哪里找到它,以及如何为合并或 diff 调用它。 现在我们将告诉他们这样做。 在“ui”部分中,将“merge”的值设置为“vsDiffMerge”。 在“tortoisehg”部分中,将“vdiff”的值设置为“vsDiffMerge”。
保存 Mercurial.ini 文件。
如果 TortoiseHg 一直在运行,请将其关闭。 现在启动 TortoiseHg 并选择一个变更集,右键单击变更集中的任何非二进制文件,然后选择“Diff to parent”。 如果一切顺利,您应该正在查看 Visual Studio 比较您的两个文件版本。 您还会注意到,现在您拥有了一些好处,例如悬停以查看变量类型和其他有用的 diff 和 merge 工具。 这对于合并类似,但会在下面增加一个窗格,显示将要提交的合并结果。
在 Diff 中,左侧的文件将是父文件,右侧的文件将是本地副本。 在合并中,顺序为:左侧的本地文件、右侧的远程文件、底部的合并文件。
这是一个简单 Diff 的屏幕截图。
您还可以下载我编写的安装程序,该安装程序可以自动执行这些任务。 可在此处下载 HgVsDiffMergeSetup.zip (zipped MSI)。