如何制作和应用SVN补丁?

San*_*ing 38 linux diff patch

我想制作一个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
Run Code Online (Sandbox Code Playgroud)

我明白了:

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: 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Fox*_*Fox 60

使用svn patch.

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

svn diff > $TMPDIR/mypatchfile.patch
cd myOtherCheckOut
patch -p0 < $TMPDIR/mypatchfile.patch
Run Code Online (Sandbox Code Playgroud)

如果没有通过svn add或添加/删除的文件,请很好地应用您的更改svn delete

案例2:使用svn patch:

svn diff > $TMPDIR/mypatchfile.patch
cd myOtherCheckOut
svn patch $TMPDIR/mypatchfile.patch
Run Code Online (Sandbox Code Playgroud)

轨道也添加和删除了文件.

请注意,跟踪svn moves和renames 都没有


Mar*_*eed 46

默认情况下,patch忽略目标文件名的目录部分; 它只是在你当前的工作目录中寻找"httpd.conf".如果您希望它使用完整路径,则必须使用以下-p选项明确要求它执行此操作:

patch -p 0 < httpd.patch

(后面的数字-p告诉它从文件名路径中删除多少级别;删除-p N 所有内容,包括斜杠号N.第一个斜杠是数字1,所以-p 0意味着"不要剥离任何东西".)

一般来说,最好不要依赖补丁文件中的完整路径; 如果它甚至适用于不同目录布局中的文件,那么该补丁将更有用.在运行patch之前,您始终可以cd到包含该文件的目录中(如果需要,可以使用完整路径查找补丁文件本身).


Jam*_*zba 5

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

去创造:

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

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

申请:

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

系统将提示您选择要应用补丁的文件,并在必要时合并。