Ich versuche, eine Datei ( db/irrelevant.php
) von einem Git-Diff auszuschließen . Ich habe versucht, eine Datei in das mit der Zeile db
aufgerufene Unterverzeichnis einzufügen .gitattributes
, irrelevant.php -diff
und ich habe auch versucht, eine Datei mit dem Namen .git/info/attributes
enthaltend zu erstellen db/irrelevant.php
.
In allen Fällen ist die db/irrelevant.php
Datei als Git-Binär-Patch im Diff enthalten. Ich möchte, dass die Änderungen an dieser Datei vom Befehl diff ignoriert werden. Was mache ich falsch?
.gitignore
Dateisyntax unterscheidet. ZB:!*shrinkwrap.yaml
statt:!shrinkwrap.yaml
.git diff -- . ':(exclude)*.min.js' ':(exclude)*.min.css'
git diff -- . ":(exclude)db/irrelevant.php"
(doppelte Anführungszeichen anstelle von einfachen Anführungszeichen)git diff -- . :(exclude)db/irrelevant.php
Sie können einen benutzerdefinierten Diff-Treiber mit dem Befehl no op einrichten und ihn den Dateien zuweisen, die ignoriert werden sollen.
Erstellen Sie mit diesem Befehl einen repository-spezifischen Diff-Treiber
oder für alle deine Repos mit
--global
.(Wenn
/bin/true
in MacOS nicht vorhanden, werden Alternativen verwendet/usr/bin/true
oderecho
).Weisen Sie dann den neuen Diff-Treiber den Dateien zu, die in Ihrer
.git/info/attributes
Datei ignoriert werden sollen.Wenn dieser Status mit anderen Entwicklern geteilt werden soll, können Sie den Befehl
.gitattributes
anstelle von verwenden.git/info/attributes
undgit config
mit Ihren Kollegen teilen (über eine Dokumentationsdatei oder etwas anderes ).quelle
[diff "nodiff"]
`command = / bin / true` und dann eine Datei mit dem Namen erstellt .git / info / Attribute, zu denen ich hinzugefügt habe:irrelevant.php diff=nodiff
git diff --stat
. In diesem Fall könnte mangit diff ... | diffstat
als Workaround verwenden.--no-ext-diff
Sie können auch das filterdiff- Programm der Patchutils- Programmsammlung verwenden, um einige Teile eines Diff auszuschließen. Beispielsweise:
quelle
-p
auf der Manpage (1) "-pn, --strip-match = n lautet. Ignorieren Sie beim Abgleich die ersten n Komponenten des Pfadnamens." Es dauerte eine Weile, bis ich herausfand,-p 1
dass dasdb
Teil aus dem Weg des OP entfernt wurde. Wenn Sie nur einen Dateinamen angeben und alle Pfad- / Verzeichnismöglichkeiten ignorieren möchten, können Sie verwenden-p 99
.Diese Methode ist kürzer als die akzeptierten Antworten.
Weitere Informationen zu den verschiedenen Einschluss- / Ausschlussmöglichkeiten finden Sie in diesem anderen Beitrag
quelle
Diese einzeilige Lösung erfordert keine weiteren Dienstprogramme / Downloads:
Wo
file/to/exclude.txt
ist der Name der Datei, die Sie natürlich ausschließen möchten?Bearbeiten: credit ksenzee zum Beheben gelöschter Dateien, die den Diff brechen.
quelle
git diff --stat master
ohne großen Erfolg anzupassen - könnten Sie helfen?Wirklich gute Antwort von KurzedMetal für das, was ich tun musste, nämlich die Fähigkeit zu sehen, dass sich die Datei geändert hat, aber nicht den Unterschied zu erzeugen, der in meinem Fall riesig gewesen sein könnte.
Aber ein Kollege von mir schlug einen Ansatz vor, der noch einfacher war und für mich funktionierte:
Hinzufügen einer
.gitattributes
Datei in dem Verzeichnis, in dem sich die zu ignorierende Dateigit diff
mit folgendem Inhalt befindet: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 sich die Datei geändert hat, aber es wird nicht die generiertdiff
.Diese
.bin
Erweiterung für die Datei im Beispiel war absichtlich. Mir ist klar, dass dies das Standardverhalten von git für Binärdateien ist und keine spezielle Behandlung mit erforderlich ist.gitattributes
. Aber in meinem Fall wurden diese Dateien von git und dem Dienstprogramm "file" als Textdateien erkannt, und dies hat den Trick getan.quelle
Einfachste Antwort
git diff ':!db/irrelevant.php'
Es ist direkt
':!<path to file>'
nach Ihrem Diff-Befehl. Der Befehl diff kann so kompliziert sein, wie*.min.js
Sie möchten , und Sie können Platzhalter wie oder mehrere Ausschlüsse hinzufügen (Leerzeichen trennen die zitierten Blöcke), wenn Sie möchten.quelle
Relativ zum Git-Stammverzeichnis
git diff
akzeptiert einen optionalen AusschlussMöglicherweise möchten Sie einige Platzhalter hinzufügen
Zielspezifische Dateitypen
Oder legen Sie ein kleines Skript für Ihre Punktedateien ab
Wie
.bash_profile
oder.zshrc
quelle
git diff --staged
hoffen, dass dies Ihnen hilft.Es ist sehr einfach, Sie können mit Standard-Unix-Befehlen ausschließen, was Sie wollen. Diese Befehle sind unter Git Bash sogar unter Windows verfügbar. Das folgende Beispiel zeigt, wie Sie diff für pom.xml-Dateien ausschließen. Überprüfen Sie zuerst diff to master nur für Dateinamen, verwenden Sie dann 'grep -v', um Dateien auszuschließen, die Sie nicht möchten, und führen Sie dann diff to master mit der vorab festgelegten Liste erneut aus:
quelle
ähnlich der Lösung von Ben Roux , aber trotzdem teilen:
oder wenn die Änderungen bereits lokal festgeschrieben wurden:
Beispiele:
quelle
Ich mache folgendes:
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
quelle
Wenn Sie dies nur tun möchten, um das Diff visuell zu überprüfen , können Sie es mit einem visuellen Diff-Tool (wie Meld ) mit einem kurzen Befehl ausführen , der leicht zu merken ist.
Richten Sie zunächst ein Diff-Tool ein, falls Sie dies noch nicht getan haben.
Anschließend können Sie ein Verzeichnis diff ausführen.
Sie können Diffs (nach Datei) in Meld (oder einem Tool Ihrer Wahl) durchsuchen. Öffnen Sie einfach nicht die Datei, die Sie ignorieren möchten.
quelle