Wie kann man Git-Diff und Git-Protokoll dazu bringen, neue und gelöschte Dateien zu ignorieren?

154

Manchmal gibt es ein paar geänderte Dateien zusammen mit einigen neuen, gelöschten und / oder umbenannten Dateien. Wenn ich sie mache git diffoder git-logweglassen möchte, kann ich die Änderungen besser erkennen.

Eigentlich wäre es am besten, die Namen der neuen und gelöschten Dateien ohne deren Inhalt aufzulisten. Für "alt", umbenannt in "neu", möchte ich optional den Unterschied zwischen "alt" und "neu" ermitteln.

Maaartinus
quelle

Antworten:

217

Die --diff-filterOption funktioniert mit beiden diffund log.

Ich verwende --diff-filter=Mviel, was die Diff-Ausgaben nur auf Inhaltsänderungen beschränkt.

Zur Erkennung von Umbenennungen und Kopien und verwenden diese im diff Ausgabe können Sie verwenden -Mund -Cjeweils zusammen mit der Rund COptionen --diff-filter.

CB Bailey
quelle
3
Wenn git logdies verwendet wird, werden Commits, die nur Dateien hinzufügen und / oder entfernen, vollständig ignoriert.
qqx
7
Gibt es eine Möglichkeit, nur einen Datentyp tatsächlich auszuschließen? So etwas wie--diff-filter=!D
Kamil Dziedzic
24
@ Kamil Ja, das gibt es. Zitat aus der Dokumentation:Also, these upper-case letters can be downcased to exclude. E.g. --diff-filter=ad excludes added and deleted paths.
LambdaCruiser
62
  • Offizielles Dokument:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

Wählen Sie nur Dateien aus, die hinzugefügt (A), kopiert (C), gelöscht (D), geändert (M), umbenannt (R) sind und deren Typ (dh reguläre Datei, Symlink, Submodul, ...) geändert wurde (T). sind nicht zusammengeführt (U), sind unbekannt (X) oder haben ihre Paarung gebrochen (B). Es kann eine beliebige Kombination der Filterzeichen (einschließlich keiner) verwendet werden.

Wenn der Kombination * (Alles oder Nichts) hinzugefügt wird, werden alle Pfade ausgewählt, wenn eine Datei vorhanden ist, die anderen Kriterien im Vergleich entspricht. Wenn keine Datei vorhanden ist, die anderen Kriterien entspricht, wird nichts ausgewählt.

Außerdem können diese Großbuchstaben zum Ausschließen in Kleinbuchstaben geschrieben werden. ZB --diff-filter = ad schließt hinzugefügte und gelöschte Pfade aus.

Beispiel: Nur hinzugefügte, geänderte, geänderte Dateien anzeigen, gelöschte Dateien ausschließen:

git diff --diff-filter=ACM
TeeTracker
quelle
2
Gute Anmerkung zur Verwendung von Kleinbuchstabenoptionen zum Ausschließen von Pfaden und Großbuchstabenoptionen zum Einschließen von Pfaden.
Stuyam
-3

UPDATE: Die akzeptierte Antwort von Charles Bailey ist die richtige. Die gewünschte Funktionalität ist bereits in Git integriert.

Ich werde diese Antwort hier belassen, da sie möglicherweise Ideen für Dinge liefert, die nicht in Git eingebaut sind.


git diffZeigt neue und gelöschte Dateien an, indem Sie sie mit vergleichen /dev/null. Es sollte nicht zu schwierig sein, etwas zu schreiben (ich würde Perl selbst verwenden), das /dev/nulldie folgenden Zeilen bis zum nächsten Diff sucht und herausfiltert. Dann git diff ... | the-filter.

Umbenannte Dateien sind eine andere Sache. Darauf habe ich (noch) keine gute Antwort.

Keith Thompson
quelle
Das ist in Ordnung, aber auf diese Weise würde ich die Möglichkeit verlieren, Pager (weniger) nur bei Bedarf zu verwenden, nicht wahr?
Maaartinus
@maaartinus: Ich denke schon; Daran hatte ich nicht gedacht. (Persönlich, ich meine git Pager „cat“ und Verwendung ... | lessausdrücklich.) Sie betrachten könnte lesss‘ -Eoder -FOption (obwohl auf meinem System ist es nicht lassen Sie mich die Ausgabe sehen).
Keith Thompson
OK, das ist in Ordnung, aber schauen Sie sich die andere Antwort an.
Maaartinus