Як ігнорувати пробіли при порівнянні джерела у Visual Studio / TFS?


75

Інструмент порівняння в Visual Source Safe (до TFS) мав зручний прапорець для вибору "Ігнорувати пробіли".

Зараз ми використовуємо TFS з Visual Studio 2010, і діалогове вікно порівняння більше не має цієї опції. (Смішний недогляд від Microsoft!)

Отже, чи можна якось обійти це?


4
Ви повинні бути дуже обережними з цією опцією, оскільки інструмент злиття TFS не може визначити різницю між пробілами в коді та пробілами в рядковому літералі. Набагато кращим рішенням є змусити всю команду використовувати однакові стандарти для пробілів у коді.
Кіт

5
@Keith: Буквальну проблему зручно знати - я цього не помічав. Однак командні стандарти не завжди є проблемою. Якщо я оберну блок коду в умові, він автоматично відступить, спричиняючи пробіли перед кожним рядком. Я дуже хочу бачити, як оператори If / End виділяються як зміни, а не весь блок між ними.
Білл

1
Я хотів би протилежного - усе в блоці виділено. Що ще важливіше, це не лише впливає на виділення інтерфейсу, але також змінює спосіб, яким насправді робиться злиття інструменту. Припустимо, ви зливаєтеся з чиюсь зміною - ще одним Ifблоком, який перекривається з вашим Ifблоком. Якщо проігнорувати пробіли, ви отримаєте "безпечне" об'єднання (4 зміни в один рядок), тоді як у протилежному випадку ви отримаєте конфлікт для виправлення вручну (2 блоки, що перекриваються). Найгірше за все - якщо попередній тоді цей код все одно буде компілюватися (він тепер вкладений If), тому не буде очевидно, що пошкоджене злиття зіпсувало обидві ваші зміни.
Кіт,

1
Я в 2012 році і не можу зрозуміти, як змусити це працювати (diffmerge не існує, я думаю, що вони використовують новий інструмент). Переключившись на WinMerge, але було б цікаво, якщо хтось змусить це працювати, маючи можливість використовувати нові та вдосконалені інструменти 2012 року
Маріо

Відповіді:


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 / ігнорує простір

Редагувати:

Залежно від версії 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, і в кінці просто додайте / ігноруйте простір. Наприклад, у VS2015 це буде:

%1 %2 /ignorespace

5
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\vsDiffMerge.exeу VS13
Сердж Саган

3
Здавалося, не працює у VS13 ... пішов з WinMerge ... це працює.
Serj Sagan

Я використав ваші вказівки, щоб замінити команду порівняння на аргументи KDiff3:% 1% 2
Ден Рендольф

1
Використання вищезазначеного рядка cmd VS2015 ("ігнорує простір" чи ні) для мене не працює. Коли я працюю в VS, я запускаю "Порівняти ..." з 2 папок з Source Control Explorer, щоб отримати відмінності від папок; у результатах я натискаю клавішу на одній знайденій різниці, вона "блимає" так, ніби робила порівняння - але не відкриває вкладку з результатами. Я також спробував аргументи "/ t" та "/ m".
галактика

6
Це рішення більше не працює у VS2017. Той самий варіант Ігнорувати простір доступний через меню Інструменти (як відповіли нижче), але MS змінила значення, щоб ігнорувати лише на початку або в кінці рядка. Навіть опція меню називається "Ігнорувати обрізання WhiteSpace"
Махен

33

На панелі інструментів Visual Studio 2017 є кнопка "=", яка допомагає порівнювати файли за вашим бажанням. Сподіваюся, цей знімок екрану допоможе.

Знімок екрана панелі інструментів Visual Studio 2017.  Кнопка зі знаком рівності знаходиться праворуч, поруч із піктограмою замка.  У підказці для кнопки зазначено "Ігнорувати обрізання пробілів Ctrl + \, Ctrl + Пробіл".


6
Це працює для пробілів на початку або в кінці рядків, але не в середині тексту. Тож у моєму випадку це абсолютно марно.
Махен

Це працює, оскільки Visual Studio замінює вкладку пробілом і навпаки, коли ми використовуємо гарячі клавіші для форматування кодів. Отже, коли ми переглядаємо коди, ми бачимо, що такі незручні зміни
vu ledang

Ця відповідь допомогла мені не лише з моєю поточною проблемою, але також сповістила мене про "автоматичну синхронізацію поглядів", що допоможе, коли я роблю великі злиття. Дякую за це!
Ендрю Грімм,

Принаймні у Visual Studio 2019 панель інструментів, у якій він знаходиться, називається "Порівняти файли".
Ендрю Грімм,

9

Інструмент різниці за замовчуванням у Visual Studio надзвичайно дратує. Я пропоную вам скористатися альтернативою. WinMerge - мій улюблений. Він також має можливість ігнорувати пробіли (меню Редагувати -> Параметри -> Порівняти -> Ігнорувати все (під груповим полем "Пробіли" вгорі)).

Подивитися Використання WinMerge з TFS .


+1, хоча я б додав голос за SourceGear Diffmerge
Джеймс Рід

Дякую за відповідь. Можливо, ви захочете оновити своє посилання на щось недавнє, ніж десятиліття.
jbyrd

5

У VS2015 можна "ігнорувати пробіли", порівнюючи клацання маленького значка із =символом.
Перейдіть до "Перегляд / Панелі інструментів / Порівняння файлів". На панелі інструментів натисніть "Ігнорувати обрізання пробілів".

Оновлення 2020 : ми багато боролись із вирішенням конфліктів за допомогою інструменту порівняння VS та Tornoise SVN, тому після дослідження ми вирішили встановити Devart Code Compare (безкоштовна версія), яка має інтеграцію з VS2015 / 2017/2019, SVN (Tortoise та Ankh) , TFS, Mercurial, GIT тощо та Windows Explorer, тому більше не кошмари / плутанина між різними інструментами порівняння. Спробуйте, це надзвичайно корисно. У ньому також є Merge для вирішення конфліктів та Folder diff, що дійсно корисно, коли SVN не об’єднується з якихось причин. Крім того, натискання стрілок вліво / вправо для копіювання змін є особливістю, яка мені дуже подобається.

Нижче зображення VS з веб-сайту Devart, але в моєму випадку я налаштував Code Compare, щоб відкрити його поза VS замість вбудованого, я думаю, що він поводиться краще. А у VS у Options > Source Control > Subversion Environmentмене таке:

введіть тут опис зображення

введіть тут опис зображення


Привіт і ласкаво просимо до StackOverflow. Незважаючи на те, що ця відповідь пропонує вирішення проблеми, краще надати деякі пояснення. Будь ласка, подивіться тут кілька порад.
Чайте

Я думав, що це вирішить мої проблеми, але я усвідомлюю, що вже ввімкнув пробіли. Вбудований інструмент diff не дуже розумний, проте є багато змін пробілів, які, здається, вважаються не змінами пробілів.
Скотт Ленгем,

1
Це працює при порівнянні файлів, але не працює при вирішенні конфлікту злиття.
Поліфун

3

у VS 2012 це може бути те, що ви шукаєте, без змін в інструменті Diff.

Відкривши екран порівняння у VS 2012, і вгорі ви побачите наступну опцію на панелі інструментів. оскільки це може бути те саме порівняння, що і користувач: Знімок екрана.

введіть тут опис зображення


2

Інструмент порівняння по замовчуванням в VS 2013 дійсно дозволяють ігнорувати прогалини в кінці кінців. Просто запустіть стандартний процес розмежування. Коли Visual Studio виявить відмінності, загляньте на панель інструментів, де ви побачите піктограму, схожу на документ, під яким 5 крапок, як показано нижче. Ця кнопка перемикає, чи відображаються відмінності ігнорують пробіли. Це працювало досить добре для мене; Я хотів, щоб він ігнорував зміни в пропуску, викликані відступами. Кнопка панелі інструментів VS 2013 для ігнорування пробілів


4
У Visual Studio 2017 15.7.1 на місці значка відповіді нова піктограма виглядає як невеликий знак рівності.
tom_mai78101

Це працює лише для пробілів у передній або кінці рядка (звідси і назва обрізати пробіли), а не в середині. Так asdf(qwerty)позначено як відмінне відasdf ( qwerty )
Elaskanator
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.