Jak używać, awkaby wyświetlać tylko linie +i -, uwzględniając dowolny kolor lub formatowanie tekstu git diff:
Żadna z pozostałych odpowiedzi tutaj (w tym moja druga odpowiedź ) nie zrobi dokładnie tego, co chcesz w 100% poprawnie. Ta odpowiedź jednak będzie. Oto 1-liniowiec, który możesz skopiować i wkleić do swojego terminala. Właśnie utworzyłem go w wielu wierszach, aby był czytelny - możesz go skopiować i wkleić w ten sam sposób w obie strony, więc równie dobrze mogę uczynić go czytelnym! Opiera się na awkjęzyku programowania:
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
Oto jego cechy. Wszystkie te cechy razem wzięte rozwiązują wady każdej innej odpowiedzi tutaj:
- Obsługuje wydruki kolorowe ORAZ bez koloru. To właśnie robi to wyrażenie regularne:
^(\033\[(([0-9]{1,2};?){1,10})m)?
- Obsługuje WSZYSTKIE KOLORY i WSZYSTKIE OPCJE FORMATOWANIA TEKSTU, w tym pogrubienie, kursywa, przekreślenie itp., Które można ustawić w
git configustawieniach . Dlatego powyższe wyrażenie regularne zawiera ;?i {1,10}: jeśli wykryje początek koloru lub kodu formatowania tekstu, dopasuje do 10 sekwencji tych połączonych kodów ANSI.
NIE zawiera również wierszy zaczynających się od @@i słowa diff, jak to ma miejsce w zaakceptowanej odpowiedzi . Jeśli chcesz te linie (które szczerze mówiąc, myślę, że są przydatne :)), zrób to zamiast tego:
git diff --unified=0
lub
git diff -U0
Pokazuje dane wyjściowe w taki sam sposób, jak git diffbyłby to: na lesspagerze z opcjonalnym wyjściem kolorowym ( -R) i tylko wtedy, gdy tekst jest> 1 strona ( -F), i zachowując bieżącą stronę tekstu na ekranie, gdy qwykonujesz polecenie uit ( -X) .
Ma również tę zaletę, że jest potężny i łatwo konfigurowalny, ponieważ używa języka programowania awk.
Jeśli jesteś zainteresowany nauką awk , oto kilka zasobów:
gawk(GNU awk) podręcznik: https://www.gnu.org/software/gawk/manual/html_node/index.html#SEC_Contents
- Badanie
git diffni zamieszczone tam komentarze: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/git-diffn.sh
- Jeśli chcesz
git diffn, czyli git diffz numerami linii, zobacz tutaj: Git diff z numerami linii (Git log z numerami linii)
- Niektóre przykłady testów awk „hello world” i testów składni: https://github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world/tree/master/awk
Jako bonus git diffcdodałem również powyższe, aby użyć jako , co oznacza "git diff, aby pokazać TYLKO 'zmiany". Użycie jest identyczne z git diff; po prostu użyj git diffczamiast tego! Obsługuje WSZYSTKIE opcje. Kolor jest domyślnie WŁĄCZONY. Aby go wyłączyć, po prostu użyj git diffc --no-colorlub git diffc --color=never. Zobacz man git diffszczegóły.
Odkąd właśnie skończyłem wczoraj wieczorem git diffn(narzędzie do wyświetlania za git diffpomocą linii i liczb), pisanie git diffcbyło trywialne. Pomyślałem, że lepiej zrobię to teraz, kiedy wiedza jest świeża w mojej głowie.
Zainstaluj git diffc:
Postępuj zgodnie z instrukcjami na końcu tej odpowiedzi tutaj , z wyjątkiem wszystkich miejsc, które widzisz git-diffnw instrukcjach, użyj git-diffczamiast tego. Dotyczy to również wgetpolecenia. Pobieranie i instalowanie git diffcjest łatwe: to tylko kilka poleceń.