2012-04-26 26 views
20

Me gustaría crear un archivo de parche de tipo SVN para httpd.conf, así puedo aplicarlo fácilmente a otros hosts.Cómo crear y aplicar el parche SVN?

Si hago

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 

me sale:

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: 

Pregunta

¿Qué estoy haciendo mal?

Respuesta

32

De forma predeterminada, patch ignora la parte del directorio del nombre del archivo de destino; solo busca "httpd.conf" en su directorio de trabajo actual. Si desea que se utilice la ruta completa, usted tiene que pedir explícitamente que lo haga con la opción -p:

patch -p0 < httpd.patch

(El número después de -p dice que el número de niveles para quitar del camino nombre de archivo; -p N quita todo hasta e incluye el número de barra N. La primera barra es el número 1, entonces -p0 significa "no pelar nada")

En general, sería mejor que no confiara en tener la ruta completa en el archivo de parche, sin embargo; el parche será más útil en general si funciona incluso para archivos en un diseño de directorio diferente. Siempre puede hacer un cd en el directorio que contiene el archivo antes de ejecutar el parche (y usar una ruta completa para encontrar el archivo del parche, si es necesario, en su lugar).

30

Use svn patch.

Caso 1: usando /usr/bin/patch:

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

aplica los cambios y si no hay archivos añadidos/eliminados a través svn add o svn delete

Caso 2: usando svn patch:

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

Pistas añadidas y eliminadas también.

notar que ni pistas svn move s y s rename

3

Si está utilizando TortoiseSVN hay una interfaz fácil de usar para crear y aplicar un parche.

crear:

clic derecho en la carpeta -> TortoiseSVN -> Crear parche

Se le solicitará que seleccione un archivo de salida

para aplicar:

Haga clic derecho en la carpeta -> TortoiseSVN -> Aplicar parche

Se le pedirá una interfaz para seleccionar el archivo (s) para aplicar los parches y combinar si es necesario.

Cuestiones relacionadas