【问题标题】:How to ignore white space when comparing source in Visual Studio / TFS?在 Visual Studio / TFS 中比较源代码时如何忽略空格?
【发布时间】:2011-09-09 16:56:13
【问题描述】:

Visual Source Safe(TFS 之前)中的比较工具有一个方便的复选框来选择“忽略空白”。

现在我们在 Visual Studio 2010 中使用 TFS,比较对话框不再有此选项。 (来自微软的荒谬疏忽!)

那么,有没有办法解决这个问题?

【问题讨论】:

  • 您应该非常小心使用此选项,因为 TFS 合并工具无法区分代码中的空白和字符串文字中的空白。更好的解决方案是让整个团队对代码中的空白使用相同的标准。
  • @Keith:字面上的问题很容易知道 - 我没有注意到这一点。然而,团队标准并不总是问题。如果我将一段代码包装在一个条件中,它会自动缩进,导致每一行前面都有空格。我真的只想看到突出显示为更改的 If/End 语句,而不是两者之间的整个块。
  • 我想要相反的 - 块中的所有内容都突出显示。更重要的是,这不仅会影响 UI 突出显示,还会改变工具实际进行合并的方式。假设您与某人的更改合并 - 另一个与您的 If 块重叠的 If 块。如果您忽略空格,您将获得“安全”合并(4 个单行更改),而如果您不这样做,您将获得手动修复的冲突(2 个重叠块)。最糟糕的是——如果是前者,那么该代码仍然可以编译(它现在是一个嵌套的If),因此损坏的合并已经搞砸了你的两个更改,这并不明显。
  • 我在 2012 年,无法弄清楚如何让它工作(diffmerge 不存在,我认为他们正在使用新工具)。切换到 WinMerge,但如果有人能够选择使用新的和改进的 2012 年工具,我会很感兴趣

标签: visual-studio-2010 tfs


【解决方案1】:

这是一种似乎可以解决问题的解决方法。

在 Visual Studio 中,选择工具/选项/源代码管理/Visual Studio Team Foundation System,然后单击配置用户工具按钮。

在对话框中,添加具有以下设置的项目。

  • 扩展名:.*
  • 操作:比较
  • 命令:C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\diffmerge.exe
  • 参数:%1 %2 %6 %7 %5 /ignorespace

编辑:

根据您的 Visual Studio 版本安装路径 (x64/x86),命令选项可能是...

VS2010: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\diffmerge.exe
VS2012: strong> C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\diffmerge.exe
VS2013: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\vsDiffMerge.exe
VS2015: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\vsDiffMerge.exe
VS2017: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ CommonExtensions\Microsoft\TeamFoundation\Team Explorer\vsDiffMerge.exe

在参数选项中,保留与 VS 建议的相同数量的参数,最后添加 /ignorespace。例如,在 VS2015 中它将是:

%1 %2 /ignorespace

【讨论】:

  • C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\vsDiffMerge.exe 在 VS13 中
  • 在 VS13 中似乎不起作用...与 WinMerge 一起使用...有效。
  • 我使用您的说明将比较命令替换为 KDiff3 参数:%1 %2
  • 使用上面的 VS2015 cmd 行(“ignorespace”与否)对我不起作用。在 VS 中,我从源代码管理资源管理器运行 2 个文件夹的“比较...”以获取文件夹差异;在结果中,我单击它找到的单个差异,它“闪烁”就好像它进行了比较一样 - 但没有打开带有结果的选项卡。我也尝试了“/t”和“/m”参数。
  • 此解决方案不再适用于 VS2017。通过“工具”菜单提供相同的“忽略空格”选项(如下所述),但 MS 已将含义更改为仅在行首或行尾忽略。甚至菜单选项都被称为“Ignore Trim WhiteSpace”
【解决方案2】:

Visual Studio 2017 toolbar 上有一个“=”按钮,可帮助您根据需要比较文件。希望此屏幕截图对您有所帮助。

【讨论】:

  • 这适用于行首或行尾的空白,但不适用于文本中间。所以在我的情况下它是毫无用处的。
  • 它有效,因为当我们使用热键格式化代码时,Visual Studio 用空格替换制表符,反之亦然。因此,当我们审查代码时,我们会看到令人尴尬的变化
  • 这个答案不仅帮助了我解决当前的问题,还提醒我“自动同步视图”,这在我进行大合并时会有所帮助。谢谢!
  • 至少在 Visual Studio 2019 中,它所在的工具栏称为“比较文件”。
【解决方案3】:

Visual Studio 中的默认差异工具非常烦人。我建议您使用替代方法。 WinMerge 是我的最爱。它还有一个忽略空格的选项(菜单 Edit -> Options -> Compare -> Ignore all (在顶部的组框“空白”下))。

Using WinMerge with TFS

【讨论】:

  • +1,虽然我会为SourceGear Diffmerge添加一票
  • 感谢您的回答。您可能希望将链接更新为十年前的新内容。
【解决方案4】:

在 VS2015 中,将单击小图标与 = 符号进行比较时,可能会“忽略空白”。
转到“查看/工具栏/比较文件”。在工具栏中点击“忽略修剪空白”。

2020 年更新:我们在解决与 VS 比较工具和 Tortoise SVN 之间的冲突时遇到了很多困难,因此经过研究我们决定安装与 VS2015/ 集成的Devart Code Compare(免费版) 2017/2019、SVN(乌龟和 Ankh)、TFS、Mercurial、GIT 等和 Windows 资源管理器,因此不同比较工具之间不再有噩梦/混淆。试试看,非常好用。它还具有解决冲突的合并和文件夹差异,这在 SVN 由于某种原因没有合并时非常有用。此外,单击左/右箭头复制更改是我非常喜欢的一个功能。

下面的 VS 图像来自 Devart 网站,但在我的情况下,我设置 Code Compare 以在 VS 外部而不是嵌入式打开它,我认为它的表现更好。在 VS Options > Source Control > Subversion Environment 中,我有这个:

【讨论】:

  • 您好,欢迎来到 StackOverflow。虽然这个答案提供了问题的解决方案,但最好提供一些解释。请查看here 以获取一些提示。
  • 我以为这会解决我的问题,但我意识到我已经启用了忽略空格。内置的 diff 工具虽然不是很聪明,但有很多空白变化,它似乎认为不是空白变化。
  • 这在比较文件时有效,但在解决合并冲突时无效。
【解决方案5】:

在 VS 2012 中,这可能就是您正在寻找的,而无需更改 Diff 工具。

在 VS 2012 中打开比较屏幕,您会在顶部的工具栏中看到以下选项。因为它可能与用户相同的比较:主屏幕截图。

【讨论】:

    【解决方案6】:

    VS 2013 中的默认差异工具确实让你忽略空格。只需运行标准差分过程。当 Visual Studio 显示差异时,查看工具栏上的图标,您将在其中看到一个看起来像文档的图标,其下方有 5 个点,如下所示。此按钮切换显示的差异是否忽略空白。这对我来说已经足够好了;我希望它忽略缩进引起的空白区域的变化。

    【讨论】:

    • 在 Visual Studio 2017 15.7.1 中,在答案图标的位置,新图标看起来像一个小等号。
    • 这仅适用于行首或行尾的空白(因此名称为 trim 空白),而不适用于中间。所以asdf(qwerty) 被标记为不同于asdf ( qwerty )
    猜你喜欢
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多