Як використовувати awkдля показу лише рядки +та -рядки, що враховують будь-яке кольорове або форматування тексту, git diffможе виводитись:
Ні один з інших відповідей тут (включаючи мою іншу відповідь ) не зробить точно те, що ви хочете на 100% правильно. Однак ця відповідь буде. Ось 1-лайнер, який можна скопіювати та вставити у свій термінал. Я щойно зробив це кілька рядків для читабельності - ви можете скопіювати і вставити його однаково в будь-якому випадку, щоб я міг зробити його читабельним! Він спирається на awkмову програмування:
git diff --color=always "$@" | awk '
# 1. Match and then skip "--- a/" and "+++ b/" lines
/^(\033\[(([0-9]{1,2};?){1,10})m)?(--- a\/|\+\+\+ b\/)/ {
next
}
# 2. Now print the remaining "+" and "-" lines ONLY! Note: doing step 1 above first was required or
# else those lines would have been matched by this matcher below too since they also begin with
# the "+" and "-" symbols.
/^(\033\[(([0-9]{1,2};?){1,10})m)?[-+]/ {
print $0
}
' | less -RFX
Ось його особливості. Усі ці особливості, якщо взяти їх разом, вирішують недоліки кожної іншої відповіді тут:
- Він обробляє кольоровий І кольоровий вихід. Ось що робить цей регулярний вираз:
^(\033\[(([0-9]{1,2};?){1,10})m)?
- Він обробляє ВСІ КОЛЬОРИ І ВСІ ТЕКСТИ, КОТОРІ ФОРМУВАННЯ ТЕКСТУ, включаючи жирний шрифт, курсив, закреслення тощо, які ви можете встановити у своїх
git configналаштуваннях . Саме тому регулярний вираз вище , має ;?і {1,10}в ній: якщо він виявляє початок кольору або текстове форматування коди, він буде відповідати до 10 послідовностей цих комбінованих кодів ANSI.
Він також не включає рядки, які починаються з @@слова і словаdiff , як це робиться у прийнятій відповіді . Якщо ви хочете, щоб ті рядки (які, чесно кажучи, я вважаю корисними :)), зробіть це замість цього:
git diff --unified=0
або
git diff -U0
Він показує вихід таким же чином, як git diffі: в lessпейджері з необов'язковим кольоровим виведенням ( -R), і лише якщо текст> 1 сторінка (-F ), і при збереженні поточної сторінки тексту на екрані при quit ( -X) .
Це також має перевагу бути потужним і легко налаштовуватися, оскільки він використовує мову програмування awk.
Якщо ви зацікавлені в навчанні awk , ось деякі ресурси:
gawk (ГНУ awkПосібник ): https://www.gnu.org/software/gawk/manual/html_node/index.html#SEC_Contents
- Вивчення
git diffn та коментарі до них: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/git-diffn.sh
- Якщо ви
git diffnтеж хочете , що git diffвідповідає номерам рядків, дивіться тут: Git diff з номерами рядків (Git log з номерами рядків)
- Деякі приклади тесту "привіт світу" та синтаксису: https://github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world/tree/master/awk
Як бонус я також завершив вищезазначене, щоб використовуватись як git diffc, що означає "git diff для показу ТІЛЬКИ" змін ". Використання є ідентичним з git diff; просто використовуйте git diffcзамість цього! Він підтримує ВСІ опції. Колір за замовчуванням увімкнено. Щоб вимкнути його, просто використовуйте git diffc --no-colorабоgit diffc --color=never . Детальніше man git diffдив.
Оскільки я щойно закінчив git diffn (інструмент для показу git diffрядком 'n'umber) минулої ночі, написання git diffcбуло тривіальним. Я подумав, що мені краще це робити зараз, поки знання в моїй голові свіжі.
Встановити git diffc :
Дотримуйтесь інструкцій в кінці цієї відповіді тут , крім випадків, де ви бачите git-diffnінструкції, використовуйте git-diffcнатомість. Це включає і в wgetкоманду. Завантажити та встановити досить git diffcпросто: це лише кілька команд.