我想为httpd.conf
制作一个SVN类型的补丁文件,这样我就可以轻松地将它应用到其他主机上。
如果我做
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
的意思是“不剥离任何东西”。)
一般来说,最好不要依赖补丁文件中的完整路径;如果它甚至适用于不同目录布局中的文件,那么该补丁将更有用。在运行patch之前,您始终可以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
s
如果你正在使用TortoiseSVN,那么有一个易于使用的界面来创建和应用补丁。
创造:
右键单击文件夹 - > TortoiseSVN - >创建补丁
系统将提示您选择输出文件
申请:
右键单击文件夹 - > TortoiseSVN - >应用补丁
系统将提示您使用界面选择要应用修补程序的文件,并在必要时进行合并。