Patch hin, Patch her

Patch – das magische Wort unter Linux. So viele Mythen, so viel Traum, so viel Ruiniert oder angestückelt. Nur – was ist das, ein Patch? Ein Patch ist wörtlich übersetzt einfach ein Flicken, den man im Falle eines Loches drüber näht – ein Stück Stoff, eine Veränderung am Ganzen. Unter Linux sogar eine Anleitung zur Veränderung.

Wenn Programmierer etwas machen und ihre Arbeit weitergeben, ist es nicht zielführend, immer den ganzen Pulk an nicht veränderten Dateien mit zu übertragen. Also wird ein Patch erstellt, der nur die Veränderungen darstellt – ein Textfile mit bestimmtem Format. Ein gutes Beispiel ist dafür meist der Patch zum aktuellsten Kernel-Snapshot.

Aber wie generiert man das Ganze? Ich beginne hier einmal mit einem kleinen Programm namens ‚diff‘. Wie der Name schon sagt, zeigt es Unterschiede zwischen zwei Dateien auf. Mit Hilfe dieses kleinen Tools kann man genau sehen, was sich bei Dateien verändert hat. Aber brauchbar ist die Ausgabe noch nicht wirklich, wenn auch schon sehr nahe an dem, was wir wollen. Also versuchen wir es einmal mit ein paar Parametern:

diff -Naur file.old file.new > update.patch

Et voilà, hier ist unser Patch. Wer einen Haufen von Dateien überprüfen möchte, der kann auch ganze Verzeichnisse angeben. Und wenn jemand gar Entwickler ist, der nutzt einfach eine Revisionsverwaltung, die eben diff benutzt, wie zum Beispiel Subversion.

Nun wo wir unseren Patch in den Händen haben, wollen wir einmal das Ganze einspielen – also den Weg des Anderen gehen, der das neue File noch nicht kennt. Wir patchen.

Wenn der patch eine relative Pfadangabe verwendet, reicht -p1 als Parameter ansonsten kommt -p0 zum Zug:

patch -p0 < update.patch patch -p1 < update.patch

Das Ergebnis sollte in etwa so aussehen:

patching file file.old

Wenn wir nun die beiden Dateien file.new und file.old vergleichen, stellen wir fest, dass die beiden Dateien nun gleich sind. Der Patch hat unser file.old auf Stand gebracht.

Author:

One thought on “Patch hin, Patch her”

Schreibe einen Kommentar

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