I would like to make a SVN type patch file for httpd.conf so I can easily apply it to other hosts.
If I do
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
I get:
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
What am I doing wrong?
By default,
patchignores the directory portion of the target filename; it’s just looking for “httpd.conf” in your current working directory. If you want it to use the full path, you have to explicitly ask it to do so with the-poption:patch -p 0 < httpd.patchThe number after
-pis how many levels to remove from the filename path;-p Nstrips off everything up to and including slash number N. The first slash is number 1, so-p 0means “don’t strip anything”.In general, you might be better off not relying on having the full path in the patch file, though; the patch will be more generally useful if it works even for files in a different directory layout. You can always cd into the directory containing the file before running patch (and use a full path to find the patch file itself, if needed, instead).