Jak sprawić, by git-diff i git log ignorowały nowe i usunięte pliki?


155

Czasami jest kilka zmienionych plików razem z nowymi, usuniętymi i / lub zmienionymi nazwami plików. Robiąc git difflub git-logchciałbym je pominąć, aby móc lepiej dostrzec modyfikacje.

Właściwie najlepiej byłoby wymienić nazwy nowych i usuniętych plików bez ich zawartości. W przypadku „starego” zmienionego na „nowy” chciałbym opcjonalnie uzyskać różnicę między „starym” a „nowym”.

Odpowiedzi:


217

Ta --diff-filteropcja działa zarówno z, jak diffi log.

Używam --diff-filter=Mdużo, co ogranicza wyjścia różnicowe tylko do modyfikacji zawartości.

Aby wykryć zmiany nazw i kopie i użyć ich w wyniku porównywania, możesz użyć odpowiednio -Mi -C, razem z opcjami Ri .C--diff-filter


3
Użycie z git logtym spowoduje całkowite zignorowanie zatwierdzeń, które tylko dodają i / lub usuwają pliki.
qqx

7
Czy istnieje sposób, aby faktycznie wykluczyć tylko jeden typ danych? Coś jak--diff-filter=!D
Kamil Dziedzic

24
@Kamil Tak, jest. Cytat z dokumentacji:Also, these upper-case letters can be downcased to exclude. E.g. --diff-filter=ad excludes added and deleted paths.
LambdaCruiser

62
  • Oficjalny dokument:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

Wybierz tylko pliki, które są Dodane (A), Skopiowane (C), Usunięte (D), Zmodyfikowane (M), Zmienione (R), mają zmieniony ich typ (np. Zwykły plik, łącze symboliczne, podmoduł,…), nie są scalone (U), są nieznane (X) lub ich parowanie zostało przerwane (B). Można użyć dowolnej kombinacji znaków filtru (w tym żadnego).

Po dodaniu * (wszystko lub brak) do kombinacji wszystkie ścieżki są wybierane, jeśli istnieje plik, który spełnia inne kryteria porównania; jeśli nie ma pliku spełniającego inne kryteria, nic nie jest wybierane.

Również te wielkie litery można zmniejszyć, aby wykluczyć. Np. --Diff-filter = ad wyklucza dodane i usunięte ścieżki.

Przykład: pokaż tylko dodane, zmienione, zmodyfikowane pliki, wyklucz usunięte pliki:

git diff --diff-filter=ACM

2
Dobra uwaga na temat używania opcji małych liter do wykluczania ścieżek i opcji wielkich liter do dołączania ścieżek.
stuyam

-3

UPDATE: Akceptowane odpowiedź Charles Bailey jest prawidłowa; pożądana funkcjonalność jest już wbudowana w git.

Zostawię tę odpowiedź tutaj, ponieważ może ona dostarczyć pomysłów na rzeczy, które nie są wbudowane w git.


git diffpokazuje nowe i usunięte pliki, porównując je z /dev/null. Nie powinno być zbyt trudne napisanie czegoś (sam bym użył Perla), który wyszukuje /dev/nulli filtruje następujące wiersze aż do następnego porównania. Wtedy git diff ... | the-filter.

Pliki o zmienionych nazwach to inna sprawa; Nie mam (jeszcze) dobrej odpowiedzi na to pytanie.


To jest w porządku, ale w ten sposób straciłbym możliwość korzystania z pagera (mniej) tylko w razie potrzeby, prawda?
maaartinus

@maaartinus: Tak sądzę; Nie pomyślałem o tym. (Osobiście mogę ustawić git pager na „kot” i wykorzystania ... | lessw sposób jawny.) Można spojrzeć na less„s -Elub -Fopcja (choć w moim systemie nie pozwól mi zobaczyć wyjście).
Keith Thompson

OK, w porządku, ale spójrz na drugą odpowiedź.
maaartinus
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.