Jul 29

Wenn man Änderungen nicht nur von einer Datei sondern von vielen Dateien und möglicherweise auch mit komplexer Datei- bzw. Ordnerstruktur feststellen möchte um daraus eine Patch-Datei zu erzeugen, so muss man diff rekursiv anwenden um nicht jede geänderte Datei einzeln patchen zu müssen. Hier erkläre ich die übliche – sozusagen zum Standard etablierte – Vorgehensweise um dieses Ziel zu erreichen:

Zuerst vergleicht man also den Ordner mit den Originaldateien rekursiv mit der geänderten Version:

diff -urN original changed > /pfad/zu/changes.patch

Optionen:

-u  -U NUM  --unified[=NUM]  Output NUM (default 3) lines of unified context.
-r  --recursive  Recursively compare any subdirectories found.
-N  --new-file  Treat absent files as empty.

Anschließend kann man auf anderen Installationen die Patch-Datei anwenden (zuerst muss in das Verzeichnis mit den Originaldateien wechseln):

patch -p1 < /pfad/zu/changes.patch

Optionen:

-p NUM  --strip=NUM  Strip NUM leading components from file names.

Da die Patch-Datei im Verzeichnis der Originaldateien aufgerufen wird, mit diff allerdings die übergeordneten Ordner verglichen wurden, muss der Ordnername entfernt werden, dies geschieht mit der Option “-p1″.



Kommentar schreiben