我想提出一个SVN类型的补丁文件httpd.conf
,所以我可以很容易地将其应用到其他主机。
如果我做
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
我得到:
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:
题
我究竟做错了什么?
默认情况下, patch
忽略目标文件名的目录部分; 它只是希望在当前的工作目录“的httpd.conf”。 如果你想使用的完整路径,你要明确的告诉它与这么做-p
选项:
patch -p0 < httpd.patch
(后面的数字-p
告诉它多少级从文件名路径中删除; -p N
剥掉一切至多并包括斜线号N.第一斜线是数字1,所以-p0
手段“不剥去任何” 。)
一般情况下,你可能会更好不是依靠其在补丁文件,但完整路径; 该补丁会更普遍有用的,如果它的作品甚至在不同的目录布局文件。 您可以随时cd到包含运行补丁之前该文件的目录(和使用的完整路径,找到补丁文件本身,如果需要的话,而不是)。
使用svn patch
。
案例1: 使用/usr/bin/patch
:
svn diff > $TMPDIR/mypatchfile.patch
cd myOtherCheckOut
patch -p0 < $TMPDIR/mypatchfile.patch
适用于你的变化以及是否有过不添加/删除的文件svn add
或svn delete
案例2: 使用svn patch
:
svn diff > $TMPDIR/mypatchfile.patch
cd myOtherCheckOut
svn patch $TMPDIR/mypatchfile.patch
曲目添加和删除过的文件。
请注意,无论是轨道svn move
S和rename
小号
如果你正在使用TortoiseSVN有一个简单易用的界面来创建和应用补丁。
创造:
右键点击文件夹 - > TortoiseSVN的 - >创建补丁
系统将提示您选择一个输出文件
申请:
在文件夹右键 - > TortoiseSVN的 - >应用补丁
你会用一个接口来选择文件(S)的补丁应用到,如果necassary合并提示。