web-dev-qa-db-fra.com

Comment créer et appliquer le patch SVN?

Je voudrais créer un fichier de correctif de type SVN pour httpd.conf afin que je puisse l'appliquer facilement à d'autres hôtes.

Si je fais

cd /root
diff -Naur /etc/httpd/conf/httpd.conf_original /etc/httpd/conf/httpd.conf > httpd.patch
cp /etc/httpd/conf/httpd.conf_original /etc/httpd/conf/httpd.conf
patch < httpd.patch

Je reçois:

can't find file to patch at input line 3
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|--- /etc/httpd/conf/httpd.conf_original    2012-04-26 13:36:08.331068438 +0200
|+++ /etc/httpd/conf/httpd.conf 2012-04-26 14:27:36.857075085 +0200
--------------------------
File to patch: 

Question

Qu'est-ce que je fais mal?

35
Sandra Schlichting

Par défaut, patch ignore la partie répertoire du nom de fichier cible; il recherche simplement "httpd.conf" dans votre répertoire de travail actuel. Si vous voulez qu'il utilise le chemin complet, vous devez lui demander explicitement de le faire avec le -p option:

patch -p 0 < httpd.patch

Le nombre après -p est le nombre de niveaux à supprimer du chemin du nom de fichier; -p N supprime tout jusqu'au slash numéro N inclus. Le premier slash est le numéro 1, donc -p 0 signifie "ne rien enlever".

En général, vous feriez mieux de ne pas compter sur le chemin complet dans le fichier correctif; le correctif sera plus généralement utile s'il fonctionne même pour des fichiers dans une disposition de répertoire différente. Vous pouvez toujours cd dans le répertoire contenant le fichier avant d'exécuter le correctif (et utiliser un chemin complet pour trouver le fichier correctif lui-même, si nécessaire, à la place).

46
Mark Reed

Utilisation svn patch.

Cas 1: en utilisant /usr/bin/patch:

svn diff > $TMPDIR/mypatchfile.patch
cd myOtherCheckOut
patch -p0 < $TMPDIR/mypatchfile.patch

Applique bien vos modifications s'il n'y a pas de fichiers ajoutés/supprimés via svn add ou svn delete

Cas 2: en utilisant svn patch:

svn diff > $TMPDIR/mypatchfile.patch
cd myOtherCheckOut
svn patch $TMPDIR/mypatchfile.patch

Les pistes ont également été ajoutées et supprimées.

Notez qu'aucune piste svn moves et renames

56
Fox

Si vous utilisez TortoiseSVN, il existe une interface facile à utiliser pour créer et appliquer un patch.

Pour créer:

Faites un clic droit sur le dossier -> TortoiseSVN -> Créer un patch

Vous serez invité à sélectionner un fichier de sortie

Pour postuler:

Faites un clic droit sur le dossier -> TortoiseSVN -> Appliquer le patch

Une interface vous sera demandée pour sélectionner le ou les fichiers auxquels appliquer les correctifs et les fusionner si nécessaire.

5
James Wierzba