2012-04-26 103 views
20

我想为httpd.conf制作一个SVN类型的补丁文件,这样我就可以轻松将它应用到其他主机。如何制作和应用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: 

问题

我在做什么错?

回答

32

默认情况下,patch忽略目标文件名的目录部分;它只是在你当前的工作目录中寻找“httpd.conf”。如果你想使用的完整路径,你要明确的告诉它与-p选择这样做:

patch -p0 < httpd.patch

-p后的数字告诉它多少级,从文件名路径中删除; -p N去掉所有的一切直到并包括斜杠数字N.第一个斜杠是数字1,所以-p0的意思是“不要去掉任何东西”。)

一般来说,你最好不要依赖完整路径在补丁文件中,虽然;如果补丁程序对于不同目录布局的文件起作用,该补丁程序将更为普遍。在运行修补程序之前,您可以随时cd到包含该文件的目录中(如果需要,可以使用完整路径查找修补程序文件本身)。

30

使用svn patch

案例1:使用/usr/bin/patch

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

应用的更改以及如果没有添加/删除的文件通过svn addsvn delete

案例2:使用svn patch

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

曲目也添加和删除文件。

注意,无论是轨道svn move S和rename小号

3

如果你使用TortoiseSVN有一个简单易用的界面来创建和应用补丁。

要创建:

在文件夹右键 - > TortoiseSVN的 - >创建补丁

系统会提示您选择一个输出文件

申请:

右键单击文件夹 - > TortoiseSVN - >应用补丁

系统将提示您使用界面来选择要应用修补程序的文件,并在需要时进行合并。