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″.
Letzte Kommentare