diff und patch setze ich nicht oft ein. Deswegen muss ich jedes mal in den manpages blättern. Daher hier die kurze Notiz:
- Einen Patch anwenden:
patch < bar.patch
Dabei muss aber der Name des zu patchende Files im Patch enthalten sein (unified format). Ist das nicht siehe 2.
- Einen Patch auf ein bestimmtes File anwenden:
patch bar.conf < bar.patch
- Soll ein Patch auf ein gesamtes Verzeichnis angewandt werden ist der Aufruf ähnlich.
patch -p1 < bar.patch
Achtung! Der "p level" beschreibt wieviele Verzeichnisnamen aus den jeweilgen Pfad entfernt werden müssen. Nachdem man sich normalerweise im root Verzeichnis des Source Baums befindet nimmt man oft "1". Enthält der Patch aber ganze Pfade wie zum Beispiel: /home/gmueller/projekte/src/net/ftp.c und selbst befindet man sich in einem Arbeitsverzeichnis, das net/ftp.c enthält ist der Patch Level "5".
patch -p5 < bar.patch
Kurz gesagt: Einfach die Slashes zählen, die vor den Verzeichnissen existieren, die im aktuellen Pfad auch vorhanden sind.
- Einen Patch wieder entfernen:
patch -p5 -R < baz.patch
- Diff eines Files anlegen
diff -u original.conf neuesfile.conf > ein.patch
- Patch eines gesamten Verzeichnis
diff -rupN original/ neu/ > ein.patch