Czy istnieje sposób pokazania git-diff przefiltrowanego przez dany wzorzec.
Coś jak
git grepdiff pattern
changed file
+++ some sentence with pattern
changed file 2
--- some other pattern
Niestety najprostsze rozwiązanie nie wystarczy
git diff | grep pattern
+++ some sentence with pattern
--- some other pattern
# not an option as doesn't put the filename close to the match
Przyszedłem z obejściem przy użyciu awk
git diff | awk "/\+\+\+/{f = \$2}; /PATTERN/ {print f \$0} "
Ale chciałbym się dowiedzieć, że jest na to polecenie.
Odpowiedzi:
Nie
git diff -G <regex>
jesteś pewien, ale czy flaga nie jest OK?źródło
git diff -G <regex> --raw
Czy próbowałeś
git diff -S<string>
lubgit diff -G".*string.*"
? Zauważ, że nie są one równoważne, zobacz dokumentację o kilofie, aby dowiedzieć się, co robi -S.źródło
Inną możliwością byłoby obejrzenie całego pliku diff i wyszukanie wyniku przy użyciu zwykłych
less
poleceń (wpisz,/
a następnie wzorzec).Jeśli
less
skonfigurowałeś wyświetlanie niektórych linii przed użyciem dopasowania--jump-target=N
, jest to całkiem przydatne. Spróbuj tak:Oznacza to, że dopasowanie powinno być pokazane w linii 10 (pokazuje 9 linii kontekstu powyżej), co może wystarczyć, aby zobaczyć również nazwę pliku.
Możesz też użyć np.
--jump-target=.5
Aby ustawić mecz na środku ekranu.źródło
Używam
git log -p
, który otwiera się mniej (choć konfigurowalny), którego z kolei można wyszukiwać za pomocą /. Jest teżgit log -S <searchword>
.źródło
To wykonało pracę za mnie, mam nadzieję, że komuś pomoże:
źródło
Myślę, że twoje podejście do
diff
wyjścia „grep” jest najlepszym obejściem.Możesz ulepszyć swój skrypt awk, używając seda:
colored
: regex, aby dopasować kolorowe linie terminalamarker
: znacznik odpowiadający podziałowi z różnychdiff
porcji, linie zaczynające się od kolorowego „diff”pattern
: wzorzec do wyszukania, linie zaczynające się od kolorowego „+” lub „-” i zawierające „WZORZEC”Spowoduje to wydrukowanie porcji pełnego różnicowania, z dodanym lub usuniętym WZOREM, zachowując również przydatne kolorowe wyjście.
Zauważ, że
^[
incolored
powinno być rzeczywiste, dosłowne^[
. Możesz wpisać je w bash, naciskając Ctrl+ V, Ctrl+[źródło
^[
podobnego,colored=$'(\e\[[0-9;]*[a-zA-Z])'
a na macOS również musiszbrew install gnu-sed
i wymienićsed --> gsed
Oto niestandardowe narzędzie porównywania, które umożliwia grepowanie zmian (ale nie kontekstu):
Stosowanie
GIT_EXTERNAL_DIFF="mydiff --grep foo" git diff
Spowoduje to wyświetlenie tych wierszy w zmianach, które zawierają
foo
(w tym wiersze, w którychfoo
zniknęły z powodu wprowadzonych zmian). Zamiast niego można użyć dowolnego wzorca grepfoo
.Każdy wiersz wyjściowy zaczyna się od następującego przedrostka:
Skryptu można również używać bez rozszerzenia
--grep
opcji, w którym to przypadku po prostu formatuje pełny plik różnicowy (tj. Zapewnia pełny kontekst), jak opisano powyżej.mydiff
źródło
W systemie Windows proste rozwiązanie to:
Jeśli chcesz grupować według nazwy pliku, użyj tego
źródło
Korzystam z tego z wielką satysfakcją :)
źródło