English ▾ Themen ▾ Neueste Version ▾ git-apply zuletzt aktualisiert in 2.51.0

NAME

git-apply - Patch auf Dateien und/oder den Index anwenden

SYNOPSIS

git apply [--stat] [--numstat] [--summary] [--check]
	  [--index | --intent-to-add] [--3way] [--ours | --theirs | --union]
	  [--apply] [--no-add] [--build-fake-ancestor=<file>] [-R | --reverse]
	  [--allow-binary-replacement | --binary] [--reject] [-z]
	  [-p<n>] [-C<n>] [--inaccurate-eof] [--recount] [--cached]
	  [--ignore-space-change | --ignore-whitespace]
	  [--whitespace=(nowarn|warn|fix|error|error-all)]
	  [--exclude=<path>] [--include=<path>] [--directory=<root>]
	  [--verbose | --quiet] [--unsafe-paths] [--allow-empty] [<patch>…​]

BESCHREIBUNG

Liest die bereitgestellte Diff-Ausgabe (d.h. "einen Patch") und wendet sie auf Dateien an. Wenn Sie von einem Unterverzeichnis in einem Repository aus arbeiten, werden Patch-Pfade außerhalb des Verzeichnisses ignoriert. Mit der Option --index wird der Patch auch auf den Index angewendet, und mit der Option --cached wird der Patch nur auf den Index angewendet. Ohne diese Optionen wendet der Befehl den Patch nur auf Dateien an und erfordert nicht, dass diese sich in einem Git-Repository befinden.

Dieser Befehl wendet den Patch an, erstellt aber keinen Commit. Verwenden Sie git-am[1], um Commits aus Patches zu erstellen, die von git-format-patch[1] generiert und/oder per E-Mail empfangen wurden.

OPTIONEN

<patch>…​

Die Dateien, aus denen der Patch gelesen werden soll. - kann verwendet werden, um von der Standardeingabe zu lesen.

--stat

Anstatt den Patch anzuwenden, wird die Diff-Statistik für die Eingabe ausgegeben. Schaltet "anwenden" aus.

--numstat

Ähnlich wie --stat, zeigt aber die Anzahl der hinzugefügten und gelöschten Zeilen in Dezimalnotation und den Pfadnamen ohne Abkürzung an, um ihn maschinenfreundlicher zu gestalten. Für Binärdateien werden zwei - ausgegeben, anstatt 0 0 zu sagen. Schaltet "anwenden" aus.

--summary

Anstatt den Patch anzuwenden, wird eine kondensierte Zusammenfassung von Informationen ausgegeben, die aus erweiterten Git-Diff-Headern stammen, wie z. B. Erstellungen, Umbenennungen und Modusänderungen. Schaltet "anwenden" aus.

--check

Anstatt den Patch anzuwenden, wird geprüft, ob der Patch auf den aktuellen Arbeitsbaum und/oder die Indexdatei anwendbar ist und Fehler erkannt. Schaltet "anwenden" aus.

--index

Wendet den Patch sowohl auf den Index als auch auf den Arbeitsbaum an (oder prüft nur, ob er auf beide sauber angewendet werden könnte, wenn --check aktiv ist). Beachten Sie, dass --index erwartet, dass die Indexeinträge und die Kopien im Arbeitsbaum für die relevanten Pfade identisch sind (ihre Inhalte und Metadaten wie Dateimodus müssen übereinstimmen) und gibt einen Fehler aus, wenn dies nicht der Fall ist, selbst wenn der Patch sowohl auf den Index als auch auf den Arbeitsbaum isoliert angewendet werden könnte.

--cached

Wendet den Patch nur auf den Index an, ohne den Arbeitsbaum zu berühren. Wenn --check aktiv ist, wird nur geprüft, ob er auf den Indexeintrag sauber angewendet werden könnte.

-N
--intent-to-add

Beim Anwenden des Patches nur auf den Arbeitsbaum werden neue Dateien markiert, die später dem Index hinzugefügt werden sollen (siehe Option --intent-to-add in git-add[1]). Diese Option wird ignoriert, wenn --index oder --cached verwendet werden, und hat außerhalb eines Git-Repositorys keine Auswirkung. Beachten Sie, dass --index durch andere Optionen wie --3way impliziert werden könnte.

-3
--3way

Versucht einen 3-Wege-Merge, wenn der Patch die Identität von Blobs aufzeichnet, auf die er angewendet werden soll, und wir diese Blobs lokal verfügbar haben. Dies kann Konfliktmarker in den Dateien im Arbeitsbaum hinterlassen, die der Benutzer auflösen muss. Diese Option impliziert die Option --index, es sei denn, die Option --cached wird verwendet, und ist mit der Option --reject inkompatibel. Bei Verwendung mit der Option --cached werden alle Konflikte auf höheren Stufen im Cache belassen.

--ours
--theirs
--union

Anstatt Konflikte in der Datei zu belassen, werden Konflikte so aufgelöst, dass die Zeilen von unserer (oder ihrer oder beiden) Seite bevorzugt werden. Erfordert --3way.

--build-fake-ancestor=<file>

Neuere git diff-Ausgaben enthalten eingebettete Indexinformationen für jeden Blob, um die Originalversion zu identifizieren, auf die der Patch angewendet werden soll. Wenn diese Flagge gesetzt ist und die Originalversionen der Blobs lokal verfügbar sind, wird ein temporärer Index erstellt, der diese Blobs enthält.

Wenn ein reiner Moduswechsel (ohne Indexinformationen) angetroffen wird, werden die Informationen stattdessen aus dem aktuellen Index gelesen.

-R
--reverse

Wendet den Patch umgekehrt an.

--reject

Aus Gründen der Atomarität schlägt git apply standardmäßig den gesamten Patch fehl und berührt den Arbeitsbaum nicht, wenn einige der Hunks nicht angewendet werden können. Diese Option bewirkt, dass die anwendbaren Teile des Patches angewendet und die abgelehnten Hunks in entsprechenden *.rej-Dateien hinterlassen werden.

-z

Wenn --numstat angegeben wurde, werden die Pfadnamen nicht verändert, sondern in einem NUL-terminierten, maschinenlesbaren Format ausgegeben.

Ohne diese Option werden Pfadnamen mit "ungewöhnlichen" Zeichen gemäß der Beschreibung der Konfigurationsvariable core.quotePath (siehe git-config[1]) maskiert.

-p<n>

Entfernt <n> führende Pfadkomponenten (getrennt durch Schrägstriche) von traditionellen Diff-Pfaden. Mit -p2 wird beispielsweise ein Patch gegen a/dir/file direkt auf file angewendet. Der Standardwert ist 1.

-C<n>

Stellt sicher, dass vor und nach jeder Änderung mindestens <n> Zeilen umgebenden Kontexts übereinstimmen. Wenn weniger Zeilen umgebenden Kontexts vorhanden sind, müssen alle übereinstimmen. Standardmäßig wird nie Kontext ignoriert.

--unidiff-zero

Standardmäßig erwartet git apply, dass der anzuwendende Patch ein einheitlicher Diff mit mindestens einer Kontextzeile ist. Dies bietet gute Sicherheitsmaßnahmen, schlägt jedoch fehl, wenn ein mit --unified=0 generierter Diff angewendet wird. Um diese Prüfungen zu umgehen, verwenden Sie --unidiff-zero.

Beachten Sie, dass aus den oben genannten Gründen die Verwendung von kontextfreien Patches nicht empfohlen wird.

--apply

Wenn Sie eine der mit "Schaltet anwenden aus" gekennzeichneten Optionen verwenden, liest und gibt git apply die angeforderten Informationen aus, ohne den Patch tatsächlich anzuwenden. Geben Sie diese Flagge nach diesen Flaggen an, um den Patch ebenfalls anzuwenden.

--no-add

Beim Anwenden eines Patches werden durch den Patch vorgenommene Hinzufügungen ignoriert. Dies kann verwendet werden, um den gemeinsamen Teil zwischen zwei Dateien zu extrahieren, indem Sie zuerst diff auf sie anwenden und das Ergebnis mit dieser Option anwenden, die den Löschteil, aber nicht den Hinzufügeteil anwendet.

--allow-binary-replacement
--binary

Historisch gesehen erlaubten wir die Anwendung von Binärpatches nicht ohne explizite Erlaubnis des Benutzers, und diese Flagge war der Weg, dies zu tun. Derzeit erlauben wir die Anwendung von Binärpatches immer, so dass dies eine No-Op ist.

--exclude=<path-pattern>

Änderungen an Dateien, die dem gegebenen Pfadmuster entsprechen, nicht anwenden. Dies kann beim Importieren von Patchsets nützlich sein, wenn Sie bestimmte Dateien oder Verzeichnisse ausschließen möchten.

--include=<path-pattern>

Änderungen an Dateien, die dem gegebenen Pfadmuster entsprechen, anwenden. Dies kann beim Importieren von Patchsets nützlich sein, wenn Sie bestimmte Dateien oder Verzeichnisse einschließen möchten.

Wenn --exclude und --include Muster verwendet werden, werden diese in der Reihenfolge auf der Kommandozeile geprüft, und die erste Übereinstimmung bestimmt, ob ein Patch für jeden Pfad verwendet wird. Ein Patch für einen Pfad, der keinem Include/Exclude-Muster entspricht, wird standardmäßig verwendet, wenn keine Include-Muster auf der Kommandozeile vorhanden sind, und ignoriert, wenn ein Include-Muster vorhanden ist.

--ignore-space-change
--ignore-whitespace

Beim Anwenden eines Patches werden Änderungen am Leerzeichen in Kontextzeilen bei Bedarf ignoriert. Kontextzeilen behalten ihr Leerzeichen und werden unabhängig vom Wert der Option --whitespace keiner Leerzeichenkorrektur unterzogen. Neue Zeilen werden jedoch weiterhin korrigiert.

--whitespace=<action>

Beim Anwenden eines Patches werden neue oder geänderte Zeilen mit Leerzeichenfehlern erkannt. Was als Leerzeichenfehler gilt, wird durch die Konfiguration core.whitespace gesteuert. Standardmäßig werden nachgestellte Leerzeichen (einschließlich Zeilen, die nur aus Leerzeichen bestehen) und ein Leerzeichen, dem unmittelbar ein Tabulatorzeichen folgt, im ursprünglichen Einzug der Zeile als Leerzeichenfehler betrachtet.

Standardmäßig gibt der Befehl Warnmeldungen aus, wendet den Patch jedoch an. Wenn git-apply für Statistiken und nicht zum Anwenden eines Patches verwendet wird, lautet der Standardwert nowarn.

Sie können verschiedene <action>-Werte verwenden, um dieses Verhalten zu steuern:

  • nowarn schaltet die Warnung für nachgestellte Leerzeichen aus.

  • warn gibt Warnungen für einige dieser Fehler aus, wendet den Patch aber unverändert an (Standard).

  • fix gibt Warnungen für einige dieser Fehler aus und wendet den Patch nach der Korrektur an (strip ist ein Synonym – das Werkzeug berücksichtigte nur nachgestellte Leerzeichen als Fehler, und die Korrektur beinhaltete deren Entfernung, aber moderne Git-Versionen machen mehr).

  • error gibt Warnungen für einige dieser Fehler aus und weigert sich, den Patch anzuwenden.

  • error-all ist ähnlich wie error, zeigt aber alle Fehler an.

--inaccurate-eof

Unter bestimmten Umständen erkennen einige Versionen von diff eine fehlende neue Zeile am Ende der Datei nicht korrekt. Infolgedessen zeichnen Patches, die von solchen diff-Programmen erstellt wurden, unvollständige Zeilen nicht korrekt auf. Diese Option unterstützt die Anwendung solcher Patches, indem sie diesen Fehler umgeht.

-v
--verbose

Meldet den Fortschritt an stderr. Standardmäßig wird nur eine Nachricht über den aktuell angewendeten Patch ausgegeben. Diese Option bewirkt, dass zusätzliche Informationen gemeldet werden.

-q
--quiet

Unterdrückt die Ausgabe an stderr. Meldungen über den Patch-Status und den Fortschritt werden nicht gedruckt.

--recount

Vertrauen Sie nicht den Zeilenzählungen in den Hunk-Headern, sondern leiten Sie sie durch Inspektion des Patches ab (z.B. nach Bearbeitung des Patches, ohne die Hunk-Header entsprechend anzupassen).

--directory=<root>

Fügt allen Dateinamen <root> voran. Wenn auch ein "-p"-Argument übergeben wurde, wird dieses vor dem Voranstellen des neuen Roots angewendet.

Zum Beispiel kann ein Patch, der die Aktualisierung von a/git-gui.sh zu b/git-gui.sh betrifft, auf die Datei im Arbeitsbaum modules/git-gui/git-gui.sh angewendet werden, indem git apply --directory=modules/git-gui ausgeführt wird.

--unsafe-paths

Standardmäßig wird ein Patch, der außerhalb des Arbeitsbereichs wirkt (entweder ein von Git kontrollierter Arbeitsbaum oder das aktuelle Arbeitsverzeichnis, wenn "git apply" als Ersatz für GNU patch verwendet wird), als Fehler (oder böswillige Handlung) abgelehnt.

Wenn git apply als "besserer GNU patch" verwendet wird, kann der Benutzer die Option --unsafe-paths übergeben, um diese Sicherheitsprüfung zu überschreiben. Diese Option hat keine Auswirkung, wenn --index oder --cached verwendet werden.

--allow-empty

Gibt keinen Fehler für Patches zurück, die keine Diff enthalten. Dazu gehören leere Patches und Patches nur mit Commit-Text.

KONFIGURATION

Alles unterhalb dieser Zeile in diesem Abschnitt wird selektiv aus der git-config[1]-Dokumentation übernommen. Der Inhalt ist derselbe wie dort zu finden.

apply.ignoreWhitespace

Wenn auf change gesetzt, weist dies git apply an, Änderungen am Leerzeichen zu ignorieren, ähnlich wie die Option --ignore-space-change. Wenn auf eine der folgenden Optionen gesetzt: no, none, never, false, weist dies git apply an, alle Leerzeichenunterschiede zu respektieren. Siehe git-apply[1].

apply.whitespace

Weist git apply an, wie mit Leerzeichen umzugehen ist, ähnlich wie die Option --whitespace. Siehe git-apply[1].

SUBMODULES

Wenn der Patch Änderungen an Submodulen enthält, behandelt git apply diese Änderungen wie folgt:

Wenn --index angegeben ist (explizit oder implizit), müssen die Submodul-Commits exakt mit dem Index übereinstimmen, damit der Patch angewendet werden kann. Wenn eines der Submodule ausgecheckt ist, werden diese Auscheckvorgänge vollständig ignoriert, d.h. es wird nicht verlangt, dass sie aktuell oder sauber sind, und sie werden nicht aktualisiert.

Wenn --index nicht angegeben ist, werden die Submodul-Commits im Patch ignoriert und nur die An- oder Abwesenheit des entsprechenden Unterverzeichnisses geprüft und (falls möglich) aktualisiert.

SIEHE AUCH

GIT

Teil der git[1] Suite