Shared

VPS

Dedicated

WP Professional

WP Professional Plus

Das Tool „diff“ berechnet die Unterschiede zwischen zwei Textdateien. Diese Differenz wird „Patch“ genannt. Mit dem „patch“-Werkzeug können Sie einen Patch auf eine andere Datei anwenden.

Diff und Patch sind für die Verwendung auf Textdateien gedacht. Dateien, die binär sind oder von speziellen Programmen manipuliert werden, wie z. B. .doc, .pdf, .xlsx oder .wav-Dateien, funktionieren nicht gut mit diff und patch.

Warum diff und patch verwenden?

Grund 1: diff kann für sich allein nützlich sein, um zu sehen, was sich zwischen Dateien geändert hat, auch wenn Sie patch nie verwenden.

Grund 2: Manchmal können Sie Patches von Dritten bekommen und diese auf Ihre Dateien anwenden. Das kann vorteilhaft sein, wenn die Dateien, die gepatcht werden, groß sind, aber die Anzahl der Änderungen relativ gering ist: Die Übertragung einer Patch-Datei ist effizienter als die Übertragung der gesamten Datei.

Grund 3: Sie können Patches auf Dateien anwenden, die nicht perfekt mit der in diff verwendeten Originaldatei übereinstimmen.
Wenn Sie zum Beispiel ein CMS mit einer Konfigurationsdatei verwenden und lokale Änderungen an dieser Konfigurationsdatei vornehmen, möchten Sie diese lokalen Änderungen bei einem Upgrade Ihres CMS beibehalten. Wenn Sie die neue Konfiguration des Herstellers über Ihre Version kopieren, gehen Ihre Änderungen verloren. In vielen Fällen können Sie jedoch Patch verwenden, um die Änderungen des Herstellers aus der neuesten Version zu übernehmen, ohne dass Ihre eigenen Änderungen verloren gehen.

Was ist diff?

diff ist eine Möglichkeit, Dateien über die Befehlszeile auf Unterschiede zu vergleichen (daher der Name „diff“). Wenn Sie zum Beispiel eine Originaldatei haben, dann einige Änderungen vornehmen und sie unter einem anderen Namen speichern, können Sie die beiden mit diff vergleichen.

Diff-Bild verwenden

diff-Syntax

diff wird in der Kommandozeile verwendet. Die grundlegende diff-Syntax sieht wie folgt aus:

diff 

Dieser Befehl legt die Grundstruktur für den Vergleich einer Datei mit einer anderen fest. Es gibt auch Optionen, um dem Befehl mehr Funktionalität hinzuzufügen.

Basissyntax (ohne Optionen)

Ersetzen Sie und durch die tatsächlichen Namen der Dateien. Achten Sie darauf, dass Sie die Dateierweiterungen mit den Dateinamen einschließen. Ein einfacher diff-Befehl ohne Optionen könnte etwa so aussehen:

diff file1.html file2.html

In diesem Beispiel würde der Befehl Datei1.html und Datei2.html vergleichen und die Unterschiede in die Befehlszeile ausgeben.

diff-Syntax (mit Optionen)

Diff-Optionen fügen den Befehlen weitere Funktionen hinzu. Allerdings verändern die Optionen die Befehlssyntax ein wenig.

Diff-Optionen stehen zwischen diff und dem ersten Dateinamen:

diff -y file1.html file2.html

Sie können auch mehrere Optionen in einem Befehl kombinieren. Dazu fügen Sie alle Buchstaben der zugehörigen Optionen nach dem Bindestrich (-) an. Das sieht dann etwa so aus:

diff -uy file1.html file2.html

Sie können auch eine Variante sehen, bei der jede Option einen eigenen Bindestrich (-) erhält. Beide Methoden zum Hinzufügen mehrerer Optionen sind gültig

diff -u -y file1.html file2.html

Siehe unten eine Liste der häufig verwendeten Optionen:

Option Beschreibung
-N Ignoriert nicht vorhandene Dateien
-r Führt diff rekursiv durch ein Verzeichnis aus. Wird verwendet, um mehrere Dateien auf einmal zu vergleichen. Hinweis: Dies ist nicht dasselbe wie -R, das eine Patch-Option ist
-u Die Ausgabe wird in einem leichter lesbaren Format angezeigt. Dabei werden möglicherweise einige Informationen entfernt, z. B. Kontextzeilen.
-y Zwingt die Ausgabe, Unterschiede nebeneinander darzustellen.

Für weitere Optionen siehe diese Liste der diff-Optionen von GNU.

Diff-Ausgabe

Wenn ein diff-Befehl ausgeführt wird, sieht die grundlegende Ausgabe ähnlich aus wie diese:

Die Verwendung der Option -y ändert die Darstellung der Ausgabe

11c11< this is text from the original file---> this is the same line from the second, changed file

In der Ausgabe werden nur die Änderungen angezeigt, so dass Sie sich nicht durch die beiden Dateien wühlen müssen. Stattdessen vergleicht diff und holt die Änderungen heraus, damit Sie sie sehen können.

Tipp

Die Zeichen „>“ und „<“ in der diff-Ausgabe zeigen in die Richtung der Datei, in der der Inhalt gefunden wird. Bei dem Befehl „diff file1 file2“ verweist also ein „<“ auf Zeilen aus file1 und „>“ auf Zeilen aus file2.

Inhalt Tipp Bild

Wie man die diff-Ausgabe liest

Hier ist eine kurze Anleitung zum Lesen der diff-Ausgabe.

Die erste Zeile der Ausgabe

Die erste Zeile der Ausgabe zeigt die Zeilennummern an, die Unterschiede enthalten und die Art der Änderungen, die vorgenommen wurden.

Diff-Ausgabebild

Wenn zwei Zahlen durch ein Komma getrennt sind, bedeutet dies, dass es Änderungen von der ersten bis zur zweiten Zeilennummer gibt. Im obigen Beispielbild würde 11,12 bedeuten, dass es Änderungen in den Zeilen 11 – 12 gibt.

Das „c“, das die Zeilennummern im obigen Beispiel trennt, zeigt die Art der Änderung an. Es gibt verschiedene Buchstaben, die verschiedene Arten von Änderungen anzeigen:

Buchstabe Bedeutung
c Inhalt wurde ersetzt
a Inhalt wurde hinzugefügt oder angehängt
d Inhalt wurde gelöscht

Bei Verwendung von Patch, was im Abschnitt Was ist Patch? erklärt wird, sind diese Buchstaben wichtig. erklärt wird, werden diese Buchstaben wichtig sein.

Der Rest der Ausgabe

Der Rest der Ausgabe betrifft die tatsächlichen Unterschiede zwischen den Dateien.

Die geänderten Zeilen werden neben < oder > spitzen Klammern aufgeführt. Drei Striche (—) zeigen an, dass sich das Zeilenende der ersten Datei ändert und der Anfang der nächsten Datei. Das sieht dann wie folgt aus:

< text from file one---> text from file two

Nun, da Sie ein grundlegendes Verständnis von diff haben, ist es an der Zeit, zu patch überzugehen.

Was ist patch?

atch ist ein Befehl, der die Ausgabe von diff nimmt und sie in eine Datei schreibt. Dann kann er die abgelegte Ausgabe nehmen und eine andere Datei mit den Änderungen überschreiben. Eine häufige Anwendung ist zum Beispiel, den Patch zu verwenden, um Änderungen aus der geänderten Datei in die Originaldatei zu übertragen und sie damit identisch zu machen. Dies kann zwar auch durch Kopieren/Einfügen der aktualisierten Datei in die Originaldatei geschehen, aber der Patch ist viel schneller und effizienter.

Wie man diff und patch zusammen verwendet

Diff arbeitet, indem es die Änderungen zwischen den beiden Dateien oder Ordnern katalogisiert. Patch kann diese Änderungen nehmen, sie in einer Datei ablegen und damit ältere Versionen aktualisieren.

Patch-Optionen

Der Patch-Befehl hat auch einen eigenen Satz von Optionen, um die Funktionalität zu erweitern. Im Folgenden finden Sie eine Liste der häufig verwendeten Optionen:

-b Erzeugt ein Backup der Originaldatei
-i Zwingt den Befehl, den Patch aus der .Patch-Datei statt von der Standardeingabe zu lesen
-p Weist den Befehl an, # Anzahl von Schrägstrichen aus dem Dateipfad zum Dateinamen zu entfernen. Sie werden sehen, dass wir in den meisten Beispielen -p0 verwenden, damit keine Schrägstriche entfernt werden
-R Macht den vorherigen Patch rückgängig
-s Führt den Befehl lautlos aus. Er zeigt den Prozess nur an, wenn Fehler auftreten

Weitere Optionen finden Sie in dieser Liste der Patch-Optionen von GNU.

Erstellen eines Patches

Das Erstellen einer Patch-Datei ist der erste Schritt, um patch und diff zusammen zu verwenden. Die Patch-Datei kann verwendet werden, um Änderungen in andere Dateien einzufügen, und ist daher für Befehle wie Overwrite the original file with changes notwendig.

Um eine Patch-Datei zu erstellen, geben Sie den folgenden Befehl in die Befehlszeile ein:

diff -u file1.html file2.html > patchfile.patch

Im obigen Beispiel wird die diff-Ausgabe in eine Datei namens patchfile.patch gespeichert. Achten Sie beim Ausführen des Befehls darauf, dass Sie file1.html und file2.html in die tatsächlichen Dateinamen ändern.

Dateien mit Änderungen überschreiben

Nachdem die Patch-Datei erstellt wurde, können Sie sie verwenden, um die Änderungen in eine andere Datei zu kopieren. Zum Beispiel möchten Sie Datei1 mit den Änderungen aus der aktualisierten Datei2 überschreiben. Dazu könnten Sie eine Syntax wie diese verwenden:

patch file1.html patchfile.patch

Ersetzen Sie file1.html mit Ihrer Originaldatei. Dies würde den alten Inhalt von file1.html mit dem geänderten Inhalt von file2.html überschreiben.

Wie man einen Patch rückgängig macht

Wenn Sie die Datei vor dem Patchen auf die vorherige Version zurücksetzen möchten, können Sie dies mit diesem Befehl tun:

patch -p0 -R -i patchfile.patch

In der Befehlszeile werden Sie dann aufgefordert, den Namen der Datei einzugeben, die Sie rückgängig machen wollen. Nach der Eingabe des Dateinamens beginnt der Rückgängigmachungsprozess. Bei Erfolg wird die Datei in den vorherigen Zustand zurückversetzt.

Verzeichnisse patchen

Die Anwendung von diff und patch auf ganze Verzeichnisse ist ein ähnlicher Prozess wie die Anwendung auf einzelne Dateien.

Der erste Schritt besteht darin, eine Patch-Datei mit dem Befehl zu erstellen:

diff -ruN folder1/ folder2/ > patchfile.patch

Dann würden Sie den Befehl zum Patchen des ursprünglichen Ordners, in diesem Fall Ordner1, geben:

patch -s -p0 < patchfile.patch

Bei Erfolg sollte Ihr ursprüngliches Verzeichnis nun so aktualisiert werden, dass es dem zweiten, aktualisierten Ordner entspricht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.