Attention
Ne pas utiliser -p0
sauf si vous comprenez comment fonctionne patch
.
Diff
Créez un .diff
profond (récursif) entre deux répertoires dans le même répertoire parent. Un fichier .diff
est un fichier qui décrit toutes les différences textuelles.
diff --unified --recursive --no-dereference ORIGINAL/ PATCHED/ > patch.diff
--unified
: pour formater la sortie en un "différentiel de contexte unifié".
--recursive
: pour créer un .diff
profond.
--no-dereference
: ne pas suivre les liens symboliques.
Bien que les noms de répertoire, ORIGINAL
et PATCHED
, soient inclus dans les chemins des fichiers en sortie, patch.diff
, ils ne sont pas importants ("ne seront pas utilisés plus tard").
Patch
Avec le fichier patch.diff
, vous pouvez appliquer des correctifs à n'importe quel répertoire de la même structure hiérarchique. Vous n'avez plus besoin des répertoires nommés ORIGINAL
et PATCHED
.
Par exemple, cette commande applique le correctif au répertoire directory_to_apply_the_patch_on/
selon le patch.diff
.
patch --directory=directory_to_apply_the_patch_on/ --strip=1 < patch.diff
--directory
: pour définir le répertoire de travail pour patch
.
patch
suppose que les chemins des fichiers dans patch.diff
sont relatifs au répertoire de travail. Ces chemins ont un PATCHED/
précédent, donc vous devez d'abord le supprimer sauf si vous avez un répertoire PATCHED
à patcher dans votre répertoire de travail.
--strip=
ou -p
supprime les N premiers segments (délimités par des barres obliques) des chemins de fichiers spécifiés dans le fichier patch.diff
. --strip=1
supprime le répertoire supérieur PATCHED/
de tous les chemins de fichiers de destination, les rendant relatifs à directory_to_apply_the_patch_on/
à la place.
Vikram Dattu : est-il possible d'omettre ces noms de répertoire extérieurs ? Ou est-il nécessaire que le correctif contienne les noms de répertoire new
et orig
?
Flimm : Est-il possible d'appliquer le correctif sans exiger que les répertoires nommés orig
ou new
existent ?
Oui, c'est ce que --strip=1
permet.
Pour moi, je préfère ceci :
patch --directory=directory_to_apply_the_patch_on/ --unified --strip=1 --posix --force --set-utc --verbose < patch.diff
--unified
: pour interpréter le fichier .diff
comme un diff de contexte unifié, en sautant les suppositions de format.
--posix
: pour se comporter de manière conforme à POSIX.
--force
: pour ne pas poser de questions en cas d'échec.
--set-utc
: pour mettre à jour les heures de modification des fichiers patchés.
--verbose
: pour imprimer ce qu'il pense en essayant d'appliquer le correctif.