如何使和应用SVN补丁?(How to make and apply SVN patch?)

2019-07-29 04:05发布

我想提出一个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: 

我究竟做错了什么?

Answer 1:

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

patch -p0 < httpd.patch

(后面的数字-p告诉它多少级从文件名路径中删除; -p N剥掉一切至多并包括斜线号N.第一斜线是数字1,所以-p0手段“不剥去任何” 。)

一般情况下,你可能会更好不是依靠其在补丁文件,但完整路径; 该补丁会更普遍有用的,如果它的作品甚至在不同的目录布局文件。 您可以随时cd到包含运行补丁之前该文件的目录(和使用的完整路径,找到补丁文件本身,如果需要的话,而不是)。



Answer 2:

使用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小号



Answer 3:

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

创造:

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

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

申请:

在文件夹右键 - > TortoiseSVN的 - >应用补丁

你会用一个接口来选择文件(S)的补丁应用到,如果necassary合并提示。



文章来源: How to make and apply SVN patch?
标签: linux diff patch