Забарвлення білого простору у виході git-diff


151

Щодо форматування коду, я начебто пурист :). Я дуже часто видаляю непотрібні білі пробіли (лінії, що містять лише ws, ws в кінці рядків тощо). Я навіть встановив vim, щоб показати такі лінії, пофарбовані в червоний колір.

Моя проблема полягає в тому, що, використовуючи git-diff, я часто бачу щось подібне:

-      else{ 
+      else{

Навіть якщо у мене кольори git-diff, я не бачу різниці (у цій конкретній ситуації я видалив 1 ws в кінці рядка). Чи є спосіб сказати git-diff, щоб показати, що ws кольорові в червоний? (наприклад, ті, які відповідають / \ s + $ / regexp).


4
Якщо ви інвертуєте кольори (міняйте передній план та фон), зміни білого простору відображатимуться таким чином. Простий спосіб досягти цього у багатьох терміналах - виділити мишею текст, про який йде мова. Цей трюк працює, звичайно, лише з кольоровим розбігом.
Фларкс

Відповіді:


172

Можливо, вам знадобиться встановити параметр конфігурації color.diff.whitespace, наприклад за допомогою:

 git config color.diff.whitespace "red reverse"

(Я припускаю, що у вас вже є color.diffабо color.uiналаштовано, autoоскільки ви кажете, що бачите кольорові патчі з git diffбудь-якого випадку.)

Якщо ви хочете тонко налаштувати тип помилок пробілу, виділених червоним кольором, ви можете змінити їх core.whitespace, але blank-at-eolвін включений за замовчуванням, тому вам, ймовірно, не знадобиться змінювати це в прикладі, який ви згадуєте.

Можливим джерелом плутанини є те, що у висновку git diffпомилки пробілів виділяються лише у введених рядках, а не в тих, які видаляються. ( Оновлення: як зазначає Пол Уіттакер у своїй відповіді , яку ви повинні підняти на голосування :), ви можете це побачити, повернувши почуття різниці git diff -R.)

Додаткову документацію щодо цих параметрів конфігурації можна знайти на сторінці налаштування git

Якщо ви не хочете використовувати -Rkludge, ви можете скористатись опцією WhiteSpace Error Highlight зі сторінки відмінностей .

--ws-помилка-виділення =

Виділіть помилки пробілів на лініях, визначених кольором, визначеним кольором color.diff.whitespace. це розділений комою список старого, нового, контексту. Якщо ця опція не задана, виділяються лише помилки пробілу в нових рядках. Напр. --Ws-error -light = нові, старі виділення помилок пробілів у видалених та доданих рядках. все це може бути використане в якості короткої руки для старого, нового, контексту.

git diff --ws-error-highlight=new,old <file>

або

git diff --ws-error-highlight=all <file>

Я не знаю, як назавжди ввімкнути це і зберегти це в конфігурації, окрім використання псевдоніму:

git config alias.df 'diff --ws-error-highlight=all'

Тепер ви можете використовувати:

git df <file>

Щоб побачити зміни червоного кольору.

Зауважте, що в Git 2.11 (Q4 2016) цей псевдонім може бути замінений на:

git config diff.wsErrorHighlight all

Див. Документgit diff і даліgit config .


34
"Можливим джерелом плутанини є те, що у виведенні git diff помилки пробілу виділяються лише у введених рядках, а не в тих, що видаляються." Саме так! І немає способу показати це також для видалених рядків? (ей, це
різно

6
Додайте --global, щоб встановити у своєму ~ / .gitconfig
simlmx

17
@radarek: ви можете скористатися зворотним варіантом:git diff -R
blueyed

6
Чи є звіт про помилку для цього? Якщо ні, то, схоже, має бути.
Ajedi32

3
це спрацювало git config diff.wsErrorHighlight all. Використовуйте, git config --global [...]щоб зміни були глобальними (тобто впливали на всі репости).
Феліпе Альварес

141

Використовуйте git diff -Rдля перетворення видалених рядків у додані рядки. Тоді буде виділено пробіл пробігу.

(Це передбачає, що у вас вже увімкнено підсвічування білого простору відповідно до налаштувань кольору з відповіді Марка. Кредит за цей метод надходить до повідомлення Хуніо за адресою http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal- with-git-diff-td5653205.html .)

Наприклад, при перетворенні файлу з кінців рядка DOS в Unix git diff -Rчітко відображаються мені ^Mсимволи (дис), що з’являються на кінцях рядків. Без -R(і також без -wтощо) це показує, що весь файл змінився, але не показує, як.


4
Звичайно, ви також можете це зробити, git diff | cat -A | less -Sякщо ви відчайдушно, але крім повернення каретки, також catбуде відображатися будь-яке кольорове виділення кодів втечі буквально.
Пол Уіттакер

3
@Paul_Whittaker cat -Aне є портативним. У BSD кішки такого варіанту немає. Будь ласка, використовуйте cat -vetзамість цього.
7heo.tk

9

Використовуйте git diff --color | less -R. -RРобить керуючі коди кольору людиною зручно.

Тоді ви можете використовувати lessзвичайний пошук виразів, наприклад

/[[:space:]]+$

Цей регулярний вираз також працює vim, до речі.
Хосе Альбан

Ця остання ідея less -Rпросто полегшила мені ls --colorпроходження less.
Менахем

0

Моя версія git diffвже, здається, робить це - я git 1.7.4.1 і встановив color.ui = auto.


12
Я щойно перевірив git 1.7.5.1, і він, звичайно, не виділяє пробіли пробілів у видалених рядках.
Інфільтратор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.