在Visual Studio / TFS中比较源代码时如何忽略空格?


75

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

现在,我们将TFS与Visual Studio 2010一起使用,并且“比较”对话框不再具有此选项。(来自Microsoft的荒谬监督!)

因此,有可能以某种方式解决此问题吗?


4
您应该非常小心使用此选项,因为TFS合并工具无法分辨代码中的空格和字符串文字中的空格之间的区别。更好的解决方案是让整个团队对代码中的空白使用相同的标准。
Keith

5
@Keith:字面上的问题很容易知道-我没注意到。但是,团队标准并不总是问题所在。如果在一定条件下包装一段代码,它将自动缩进,导致每行前面出现空格。我只想看到If / End语句突出显示为更改,而不是它们之间的整个块。
2012年

1
我要相反-块中的所有内容都突出显示。更重要的是,这不仅会影响UI高亮显示,还会改变该工具的实际合并方式。假设您与某人的变更合并-If与您的If区块重叠的另一个区块。如果忽略空格,将获得“安全”合并(4个单行更改),否则,将出现手动修复的冲突(2个重叠的块)。最糟糕的是-如果是前者,则该代码仍将编译(现在是嵌套的If),因此,显而易见,损坏的合并会弄乱您的两个更改。
基思

1
我在2012年,无法弄清楚如何使其正常工作(diffmerge不存在,我认为他们使用的是新工具)。切换到WinMerge,但如果有人可以使用新的和经过改进的2012年工具,将对此感兴趣
-Mario

Answers:


79

这是一种变通方法,似乎可以解决此问题。

在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: 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

5
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\vsDiffMerge.exe在VS13中
Serj Sagan

3
似乎在VS13中不起作用...与WinMerge一起使用...有效。
Serj Sagan

我使用了您的指示信息,以用KDiff3参数替换了compare命令:%1%2
Dan Randolph 2015年

1
使用上面的VS2015 cmd行(是否使用“ ignorespace”)对我不起作用。在VS中时,我从Source Control Explorer运行2个文件夹的“比较...”,以获取文件夹差异。在结果中,我d单击找到的单个差异,就好像进行比较一样“闪烁”-但没有打开带有结果的选项卡。我也尝试了“ / t”和“ / m”参数。
galaxis

6
此解决方案在VS2017中不再起作用。可以通过“工具”菜单使用相同的“忽略空间”选项(如下所述),但是MS更改了含义,使其仅在行首或行尾忽略。甚至菜单选项也称为“忽略裁切空白”
Mahen

33

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

Visual Studio 2017工具栏的屏幕截图  等号按钮位于锁图标旁边的右侧。 该按钮的工具提示为“忽略修剪空白Ctrl + \,Ctrl + Space”。


6
这适用于行首或末尾的空白,但不适用于文本的中间。因此,对我而言,这是毫无用处的。
Mahen's

之所以有效,是因为当我们使用热键设置代码格式时,Visual Studio会用空格替换制表符,反之亦然。因此,当我们检查代码时,我们会看到令人尴尬的更改
vu ledang

这个答案不仅帮助我解决了当前的问题,而且还提醒我“自动同步视图”,这在我进行大型合并时会有所帮助。谢谢你!
安德鲁·格林

至少在Visual Studio 2019中,其所在的工具栏称为``比较文件''。
安德鲁·格林

9

Visual Studio中的默认diff工具非常烦人。我建议您使用其他方法。WinMerge是我的最爱。它还有一个忽略空格的选项(菜单“编辑” ->“选项” ->“比较” ->“忽略所有”(在顶部的“空白”组框下)。

请参阅将WinMerge与TFS一起使用


+1,尽管我要为SourceGear Diffmerge
Reed

感谢你的回答。您可能想要将链接更新为十年以上的链接。
jbyrd

5

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

2020年更新:我们在使用VS比较工具和Tortoise SVN一个方面解决了很多冲突,因此经过研究,我们决定安装与VS2015 / 2017/2019,SVN(Tortoise和Ankh)集成的Devart Code Compare(免费版) ,TFS,Mercurial,GIT等以及Windows资源管理器,因此不同比较工具之间不再存在噩梦/困惑。试试看,它非常有用。它还具有Merge来解决冲突和Folder diff,这在SVN由于某些原因不合并时非常有用。另外,我非常喜欢单击左/右箭头以复制更改。

VS图像下面是来自Devart网站的图像,但在我的情况下,我设置了“代码比较”以在VS而不是嵌入式环境下打开它,我认为它的性能更好。在VS中Options > Source Control > Subversion Environment,我有这个:

在此处输入图片说明

在此处输入图片说明


您好,欢迎来到StackOverflow。虽然此答案提供了解决问题的方法,但最好提供一些解释。请在这里查看一些提示。
Chait

我以为这将解决我的问题,但是我意识到我已经忽略了空白。尽管内置的diff工具不是很聪明,但似乎有很多空白更改似乎不是空白更改。
Scott Langham

1
比较文件时此方法有效,但解决合并冲突时则无效。
Polyfun

3

在VS 2012中,这可能就是您想要的而无需更改Diff工具的情况。

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

在此处输入图片说明


1

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


4
在Visual Studio 2017 15.7.1中,在答案图标的位置,新图标看起来像一个小的等号。
tom_mai78101 '18年

这仅适用于行的开头或末尾的空白(因此称为修剪空白),而不适用于中间的空白。因此asdf(qwerty)被标记为不同于asdf ( qwerty )
Elaskanator
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.