442 Stimmen

Datei von "git diff" ausschließen

Ich versuche, eine Datei auszuschließen ( db/irrelevant.php ) aus einer Git-Diff. Ich habe versucht, eine Datei in der db Unterverzeichnis namens .gitattributes mit der Zeile irrelevant.php -diff und ich habe auch versucht, eine Datei namens .git/info/attributes mit db/irrelevant.php .

In allen Fällen ist die db/irrelevant.php Datei ist als Git-Binärpatch in der Diff-Datei enthalten. Ich möchte aber, dass die Änderungen an dieser Datei vom diff-Befehl ignoriert werden. Was mache ich falsch?

40voto

user3589608 Punkte 459

Wirklich gute Antwort von KurzedMetal für das, was ich tun musste, nämlich zu sehen, dass sich die Datei geändert hat, aber nicht, um den Diff zu erzeugen, der in meinem Fall sehr groß gewesen wäre.

Aber ein Kollege von mir schlug einen Ansatz vor, der noch einfacher war und bei mir funktioniert hat:

Hinzufügen von .gitattributes Datei in dem Verzeichnis, in dem die Datei, die von git diff befindet sich mit folgendem Inhalt:

file-not-to-diff.bin -diff

Das lässt immer noch git status "sehen", ob sich die Datei geändert hat. git diff wird auch "sehen", dass die Datei geändert wurde, aber es wird nicht die diff .

Das .bin Dateierweiterung für die Datei im Beispiel war beabsichtigt. Mir ist klar, dass dies das Standardverhalten von Git für Binärdateien ist und keine besondere Behandlung mit .gitattributes . Aber in meinem Fall wurden diese Dateien von Git und dem Dienstprogramm "file" als Textdateien erkannt, und damit war der Trick getan.

15voto

Ben Roux Punkte 7250

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

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

Wo file/to/exclude.txt ist natürlich der Name der Datei, die Sie ausschließen möchten.

Bearbeiten: Kredit ksenzee um gelöschte Dateien zu reparieren, die das Diff beschädigen.

14voto

jasonleonhard Punkte 8428

Relativ zum Git-Stammverzeichnis

git diff akzeptiert ein optionales exclude

git diff -- ":(exclude)thingToExclude"

Vielleicht möchten Sie einige Platzhalter hinzufügen

git diff -- ":(exclude)*/thingToExclude/*"

Bestimmte Dateitypen anvisieren

git diff -- ":(exclude)*/$1/*.png"

Oder schreiben Sie ein kleines Skript für Ihre Dotfiles

Wie zum Beispiel .bash_profile ou .zshrc

gde() {
    # git diff exclude files or folders 
    # usage: 
    # gde fileOrFolderNameToExclude
    git diff -- ":(exclude)*/$1/*"
}

10voto

Carl G Punkte 15555

Wenn Sie ein Dateimuster ausschließen wollen, egal wo es sich im Verzeichnis befindet, verwenden Sie die entsprechende Git-Pfadspezifikation Wert von ** :

git diff -- ':!**/yarn.lock'

3voto

BlueMagma Punkte 2332

Ich tue 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 Material bereitgestellt haben), aber es erfüllt den Zweck, ohne einen komplizierten Befehl eingeben zu müssen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X