it-swarm.com.de

Datei von "git diff" ausschließen wollen

Ich versuche, eine Datei (db/irrelevant.php) von einem Git-Diff auszuschließen. Ich habe versucht, eine Datei in das db-Unterverzeichnis mit dem Namen .gitattributes mit der Zeile irrelevant.php -diff_ zu legen, und ich habe auch versucht, eine Datei namens .git/info/attributes zu erstellen, die db/irrelevant.php enthält. 

In allen Fällen ist die db/irrelevant.php-Datei als ein Git-Patch für Git im Diff enthalten. Ich möchte, dass die Änderungen an dieser Datei vom Befehl diff ignoriert werden. Was mache ich falsch?

155
Michael

Omg, Treiber und awk, um eine miese Datei auszuschließen? Da git 1.9 etwas kannst du:

git diff -- . ':(exclude)db/irrelevant.php' ':(exclude)db/irrelevant2.php'

Ah, Eleganz! Siehe die zitierte Antwort und für Details diese Antwort von @torek 

212
Mr_and_Mrs_D

Sie können einen benutzerdefinierten Diff-Treiber mit dem Befehl no op einrichten und diesen Dateien zuweisen, die ignoriert werden sollen.

Erstellen Sie einen repository-spezifischen Diff-Treiber mit diesem Befehl

git config diff.nodiff.command /bin/true

oder für alle Ihre Repos mit --global.

(Wenn /bin/true nicht in MacOS vorhanden ist, verwenden Alternativen /usr/bin/true oder echo).

Weisen Sie dann den neuen diff-Treiber den Dateien zu, die ignoriert werden sollen in Ihrer .git/info/attributes-Datei.

irrelevant.php    diff=nodiff

Wenn dieser Status mit anderen Entwicklern gemeinsam genutzt werden soll, können Sie .gitattributes anstelle von .git/info/attributes verwenden und den Befehl git config mit Ihren Kollegen teilen (durch eine Dokumentationsdatei oder etwas anderes).

59
KurzedMetal

Sie können auch filterdiff program der patchutils - Programmsammlung verwenden, um einige Teile eines Diff auszuschließen. Zum Beispiel:

git diff | filterdiff -p 1 -x db/irrelevant.php
34

Diese einzeilige Lösung erfordert keine weiteren Tools/Downloads:

git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`

Dabei ist file/to/exclude.txt der Name der Datei, die Sie ausschließen möchten.

Bearbeiten Sie: credit ksenzee , um gelöschte Dateien zu reparieren, die den Unterschied zerstören.

17
Ben Roux

Diese Methode ist kürzer als die akzeptierten Antworten.

git diff 987200fbfb 878cee40ba --stat -- ':!*.cs'

Weitere Informationen zu den verschiedenen Einschluss-/Ausschlussmöglichkeiten finden Sie in diesem anderen Beitrag

13

Wirklich gute Antwort von KurzedMetal für das, was ich tun musste. Das war die Fähigkeit, zu sehen, dass sich die Datei geändert hat, aber nicht den Unterschied zu erzeugen, der in meinem Fall sehr groß gewesen sein könnte.

Ein Kollege von mir schlug jedoch einen Ansatz vor, der noch einfacher war und für mich arbeitete: 

hinzufügen von .gitattributes-Datei in dem Verzeichnis, in dem sich die von git diff zu ignorierende Datei befindet, mit folgendem Inhalt:

file-not-to-diff.bin -diff

Das lässt git status noch sehen, wenn sich die Datei geändert hat. git diff "sieht" auch, dass sich die Datei geändert hat, generiert jedoch keine diff.

Diese .bin-Erweiterung für die Datei im Beispiel war beabsichtigt. Mir ist klar, dass dies das Standardverhalten von git für Binärdateien ist, und es ist keine besondere Behandlung mit .gitattributes erforderlich. In meinem Fall wurden diese Dateien jedoch von git und "file" als Textdateien erkannt.

5
user3589608

ähnlich wie Ben Roux Lösung, aber trotzdem teilen

git status --porcelain | grep -v $PATTERN_TO_EXCLUDE | awk '{print $2}' | xargs git diff

oder, wenn die Änderungen bereits lokal festgeschrieben wurden:

git diff --name-only Origin/master | grep -v $PATTERN_TO_EXCLUDE | xargs git diff Origin/master

Beispiele:

git status --porcelain | grep -v docs | awk '{print $2}' | xargs git diff Origin/master

git diff --name-only Origin/master | grep -v docs | xargs git diff Origin/master
1
Chris Montoro

Es ist sehr einfach, Sie können mit Standard-Unix-Befehlen ausschließen, was Sie wollen. Diese Befehle stehen unter git bash auch unter Windows zur Verfügung. Das folgende Beispiel zeigt, wie Sie diff für pom.xml-Dateien ausschließen, zuerst diff to master nur auf Dateinamen prüfen, dann mit 'grep -v' Dateien ausschließen, die Sie nicht möchten, und diff to master mit vorgefertigter Liste erneut ausführen:

git diff master `git diff --name-only master | grep -v pom.xml`
1

Wenn Sie dies nur tun möchten, um den Diff visuell zu prüfen, können Sie dies mit einem visuellen Diff-Tool (wie Meld ) mit einem kurzen Befehl tun, der sich leicht merken lässt.

Richten Sie zuerst ein Vergleichstool ein, falls Sie dies noch nicht getan haben.

$ git config --global diff.tool = meld

Dann können Sie ein Verzeichnis diff ausführen. 

$ git difftool --dir-diff

Sie können Diffs (nach Datei) in Meld (oder dem gewünschten Werkzeug) durchsuchen. Öffnen Sie einfach nicht die Datei, die Sie ignorieren möchten.

0
mkasberg

Ich mache folgendes:

git add *pattern_to_exclude*
git diff
git reset HEAD .

Ich weiß, dass es keine elegante Lösung ist und manchmal nicht verwendet werden kann (z. B. wenn Sie bereits Dinge inszeniert haben), aber es macht den Trick, ohne einen komplizierten Befehl eingeben zu müssen

0
BlueMagma