Wie ignoriere ich Leerzeichen beim Vergleichen der Quelle in Visual Studio / TFS?

75

Das Vergleichstool in Visual Source Safe (vor TFS) hatte ein praktisches Kontrollkästchen, um "Leerraum ignorieren" auszuwählen.

Jetzt verwenden wir TFS mit Visual Studio 2010, und der Vergleichsdialog verfügt nicht mehr über diese Option. (Ein lächerliches Versehen von Microsoft!)

Ist es also irgendwie möglich, das zu umgehen?

Rechnung
quelle
4
Sie sollten mit dieser Option sehr vorsichtig sein, da das TFS-Zusammenführungstool den Unterschied zwischen Leerzeichen im Code und Leerzeichen in einem Zeichenfolgenliteral nicht erkennen kann. Eine weitaus bessere Lösung besteht darin, das gesamte Team dazu zu bringen, dieselben Standards für Leerzeichen im Code zu verwenden.
Keith
5
@ Keith: Das wörtliche Problem ist praktisch zu wissen - das hatte ich nicht bemerkt. Teamstandards sind jedoch nicht immer das Problem. Wenn ich einen Codeblock in eine Bedingung einbinde, wird er automatisch eingerückt und verursacht Leerzeichen vor jeder Zeile. Ich möchte nur wirklich, dass die If / End-Anweisungen als Änderungen hervorgehoben werden, nicht der gesamte Block dazwischen.
Bill
1
Ich möchte das Gegenteil - alles im Block wird hervorgehoben. Noch wichtiger ist, dass dies nicht nur die Hervorhebung der Benutzeroberfläche beeinflusst, sondern auch die Art und Weise ändert, wie das Tool tatsächlich zusammengeführt wird. Angenommen, Sie verschmelzen mit der Änderung einer anderen Person - einem anderen IfBlock, der sich mit Ihrem IfBlock überschneidet . Wenn Sie Leerzeichen ignorieren, erhalten Sie eine "sichere" Zusammenführung (4 einzeilige Änderungen). Wenn Sie dies nicht tun, wird ein Konflikt manuell behoben (2 überlappende Blöcke). Das Schlimmste von allem: Wenn der erstere dann noch kompiliert wird (er ist jetzt verschachtelt If), ist es nicht offensichtlich, dass die beschädigte Zusammenführung Ihre beiden Änderungen durcheinander gebracht hat.
Keith
1
Ich bin auf 2012 und kann nicht herausfinden, wie ich das zum Laufen bringen kann (Diffmerge existiert nicht, ich denke, sie verwenden ein neues Tool). Wechseln Sie zu WinMerge, aber wäre interessiert, wenn jemand die Möglichkeit hat, die neuen und verbesserten 2012-Tools zu verwenden
Mario

Antworten:

79

Dies ist eine Problemumgehung, die das Problem zu umgehen scheint.

Wählen Sie in Visual Studio Extras / Optionen / Quellcodeverwaltung / Visual Studio Team Foundation System aus und klicken Sie auf die Schaltfläche Benutzertools konfigurieren.

Fügen Sie im Dialogfeld ein Element mit den folgenden Einstellungen hinzu.

  • Erweiterung :. *
  • Bedienung: Vergleichen
  • Befehl: C: \ Programme \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ diffmerge.exe
  • Argumente:% 1% 2% 6% 7% 5 / Ignorspace

Bearbeiten:

Abhängig von Ihrer Visual Studio-Version und dem Installationspfad (x64 / x86) kann die Befehlsoption ...

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

Lassen Sie in der Argumentoption die gleiche Anzahl von Argumenten wie vom VS vorgeschlagen und fügen Sie am Ende einfach / ignorespace hinzu. Zum Beispiel wird es im VS2015 sein:

%1 %2 /ignorespace
Rechnung
quelle
5
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\vsDiffMerge.exein VS13
Serj Sagan
3
Schien in VS13 nicht zu funktionieren ... ging mit WinMerge ... das funktioniert.
Serj Sagan
Ich habe Ihre Anweisungen verwendet, um den Vergleichsbefehl durch KDiff3-Argumente zu ersetzen:% 1% 2
Dan Randolph
1
Die Verwendung der obigen VS2015-Cmd-Zeile ("Ignorspace" oder nicht) funktioniert bei mir nicht. In VS führe ich im Versionsverwaltungs-Explorer ein "Vergleichen ..." von zwei Ordnern aus, um Ordnerunterschiede abzurufen. In den Ergebnissen klicke ich auf einen einzelnen Unterschied, der gefunden wurde. Er "blinkt", als hätte er den Vergleich durchgeführt - öffnet jedoch keinen Tab mit den Ergebnissen. Ich habe auch die Argumente "/ t" und "/ m" ausprobiert.
Galaxis
6
Diese Lösung funktioniert in VS2017 nicht mehr. Die gleiche Option zum Ignorieren des Leerzeichens wird über das Menü Extras (wie unten beantwortet) verfügbar gemacht, aber MS hat die Bedeutung so geändert, dass sie nur am Anfang oder Ende der Zeile ignoriert wird. Sogar die Menüoption heißt "Ignore Trim WhiteSpace"
Mahen
33

In der Symbolleiste von Visual Studio 2017 befindet sich die Schaltfläche "=" , mit der Sie Dateien nach Ihren Wünschen vergleichen können. Hoffe dieser Screenshot wird helfen.

Screenshot der Visual Studio 2017-Symbolleiste.  Die Schaltfläche mit dem Gleichheitszeichen befindet sich rechts neben dem Schlosssymbol.  Der Tooltip für die Schaltfläche lautet "Trimm-Leerzeichen Strg + \, Strg + Leertaste ignorieren".

Meister
quelle
6
Dies funktioniert für Leerzeichen am Anfang oder Ende von Zeilen, jedoch nicht in der Mitte des Textes. In meinem Fall ist es also ziemlich nutzlos.
Mahen
Es funktioniert, da Visual Studio Tabulatoren durch Leerzeichen ersetzt und umgekehrt, wenn wir Hotkeys zum Formatieren von Codes verwenden. Wenn wir also Codes überprüfen, sehen wir, dass Änderungen so peinlich sind
vu ledang
Diese Antwort hat mir nicht nur bei meinem aktuellen Problem geholfen, sondern mich auch darauf aufmerksam gemacht, "Ansichten automatisch zu synchronisieren", was bei großen Zusammenführungen hilfreich ist. Danke dafür!
Andrew Grimm
Zumindest in Visual Studio 2019 heißt die Symbolleiste "Dateien vergleichen".
Andrew Grimm
9

Das Standard-Diff-Tool in Visual Studio ist äußerst ärgerlich. Ich schlage vor, Sie verwenden eine Alternative. WinMerge ist mein Favorit. Es gibt auch eine Option zum Ignorieren von Leerzeichen (Menü Bearbeiten -> Optionen -> Vergleichen -> Alle ignorieren (unter dem Gruppenfeld "Leerzeichen" oben)).

Siehe Verwenden von WinMerge mit TFS .

e-mre
quelle
+1, obwohl ich eine Stimme für SourceGear Diffmerge
James Reed
Danke für die Antwort. Möglicherweise möchten Sie Ihren Link auf etwas aktualisieren, das jünger als ein Jahrzehnt ist.
20.
5

In VS2015 ist es möglich, Leerzeichen zu ignorieren, wenn Sie das Klicken auf ein kleines Symbol mit dem =Symbol vergleichen.
Gehen Sie zu "Ansicht / Symbolleisten / Dateien vergleichen". Klicken Sie in der Symbolleiste auf "Trimm-Leerzeichen ignorieren".

Update 2020 : Wir hatten große Probleme, Konflikte mit dem VS-Vergleichstool und dem Tortoise SVN zu lösen. Nach einer Recherche haben wir uns entschlossen, Devart Code Compare (kostenlose Version) zu installieren, das in VS2015 / 2017/2019 , SVN (Tortoise and Ankh) integriert ist. , TFS, Mercurial, GIT usw. und Windows Explorer, also keine Albträume / Verwirrung mehr zwischen verschiedenen Vergleichstools. Probieren Sie es aus, es ist äußerst nützlich. Es hat auch Merge, um Konflikte und Folder Diff zu lösen, was sehr nützlich ist, wenn SVN aus irgendeinem Grund nicht zusammengeführt wird. Auch das Klicken auf die Pfeile nach links / rechts, um die Änderungen zu kopieren, gefällt mir sehr gut.

Das folgende VS-Bild stammt von der Devart-Website, aber in meinem Fall habe ich Code Compare so eingerichtet, dass es außerhalb von VS geöffnet und nicht eingebettet wird. Ich denke, es verhält sich besser. Und in VS habe Options > Source Control > Subversion Environmentich Folgendes:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Luis Hernandez
quelle
Hallo und willkommen bei StackOverflow. Diese Antwort bietet zwar eine Lösung für das Problem, es ist jedoch besser, eine Erklärung abzugeben. Bitte schauen Sie hier für einige Tipps.
Chait
Ich dachte, dies würde meine Probleme lösen, aber mir ist klar, dass ich bereits Leerzeichen ignorieren aktiviert habe. Das eingebaute Diff-Tool ist jedoch nicht sehr intelligent. Es gibt eine Vielzahl von Whitespace-Änderungen, die anscheinend keine Whitespace-Änderungen sind.
Scott Langham
1
Dies funktioniert beim Vergleichen von Dateien, jedoch nicht beim Lösen eines Zusammenführungskonflikts.
Polyfun
3

In VS 2012 ist dies möglicherweise das, wonach Sie suchen, ohne das Diff-Tool zu ändern.

Wenn Sie den Vergleichsbildschirm in VS 2012 öffnen, sehen Sie oben die folgende Option in der Symbolleiste. da es der gleiche Vergleich wie Benutzer sein könnte: Master-Screenshot.

Geben Sie hier die Bildbeschreibung ein

Michael Edmison
quelle
1

Das Standard - Diff - Tool in VS 2013 ist können Sie Leerzeichen , nachdem alle ignorieren. Führen Sie einfach den Standard-Differenzierungsprozess aus. Wenn Visual Studio die Unterschiede aufzeigt, sehen Sie in der Symbolleiste ein Symbol, das wie ein Dokument mit 5 Punkten darunter aussieht, wie unten gezeigt. Diese Schaltfläche schaltet um, ob die angezeigten Unterschiede Leerzeichen ignorieren. Das hat für mich gut genug funktioniert; Ich wollte, dass Änderungen im Leerraum, die durch Einrückungen verursacht werden, ignoriert werden. VS 2013-Symbolleistenschaltfläche zum Ignorieren von Leerzeichen

Jim Black
quelle
4
In Visual Studio 2017 15.7.1 sieht das neue Symbol anstelle des Symbols der Antwort wie ein kleines Gleichheitszeichen aus.
tom_mai78101
Dies funktioniert nur für Leerzeichen am Anfang oder Ende einer Zeile (daher der Name Trimm- Leerzeichen), nicht in der Mitte. So asdf(qwerty)wird als anders markiert alsasdf ( qwerty )
Elaskanator