2012-04-26 19 views
20

Vorrei creare un file patch di tipo SVN per httpd.conf in modo da poterlo applicare facilmente ad altri host.Come creare e applicare la patch SVN?

Se faccio

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 

ottengo:

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: 

Domanda

Che cosa sto facendo di sbagliato?

risposta

32

Per impostazione predefinita, patch ignora la parte di directory del nome file di destinazione; è solo alla ricerca di "httpd.conf" nella directory di lavoro corrente. Se si desidera utilizzare il percorso completo, dovete chiedere esplicitamente di farlo con l'opzione -p:

patch -p0 < httpd.patch

(Il numero dopo -p dice che il numero di livelli per rimuovere dal percorso nome del file; -p N elimina tutto fino al numero di slash incluso N. La prima barra è il numero 1, quindi -p0 significa "non rimuovere nulla".)

In generale, si potrebbe stare meglio senza fare affidamento sull'avere il percorso completo nel file di patch, però; la patch sarà più utile in generale se funziona anche per i file in un layout di directory diverso. Puoi sempre effettuare il cd nella directory contenente il file prima di eseguire la patch (e utilizzare un percorso completo per trovare il file di patch stesso, se necessario, invece).

30

Utilizzare svn patch.

Caso 1: usando /usr/bin/patch:

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

applica le modifiche e se non ci sono file aggiunti/cancellati attraverso svn add o svn delete

Caso 2: usando svn patch:

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

Traccia anche i file aggiunti e cancellati.

Nota che né tracce svn move S e rename s

3

Se si sta utilizzando TortoiseSVN c'è un'interfaccia facile da usare per creare e applicare una patch.

Per creare:

clic destro sulla cartella -> TortoiseSVN -> Crea cerotto

Verrà richiesto di selezionare un file di output

da applicare:

Fare clic destro sulla cartella -> TortoiseSVN -> Applica patch

Verrà richiesto un'interfaccia per selezionare il/i file/i per applicare le patch e unire se necessario.

Problemi correlati