如何制作和应用SVN补丁?

我想为httpd.conf创build一个SVNtypes的补丁文件,这样我就可以轻松地将它应用到其他主机。

如果我做

 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)

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

使用svn patch

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

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

如果没有通过svn addsvn delete添加/删除文件,则svn add应用您的更改

案例2: 使用svn patch

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

曲目也添加和删除文件。

请注意, svn move都不会svn move rename

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

创造:

右键单击文件夹 – > TortoiseSVN – >创建补丁

系统将提示您选择输出文件

申请:

右键点击文件夹 – > TortoiseSVN – >应用补丁

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