【问题标题】:How to make and apply SVN patch?如何制作和应用SVN补丁?
【发布时间】:2012-05-07 04:52:19
【问题描述】:

我想为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: 

问题

我做错了什么?

【问题讨论】:

    标签: linux diff patch


    【解决方案1】:

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

    patch -p 0 &lt; httpd.patch

    -p 后面的数字是要从文件名路径中删除的级别; -p N 去除斜线号 N 之前的所有内容。第一个斜线是数字 1,因此 -p 0 表示“不要去除任何东西”。

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

    【讨论】:

      【解决方案2】:

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

      创建:

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

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

      申请:

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

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

      【讨论】:

        【解决方案3】:

        使用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 moves 和 renames 都不跟踪

        【讨论】:

        • 确保禁用任何预配置的差异工具(如果有的话),为了补丁的缘故(~/.subversion/config at diff_cmd)
        • 不应该 svn patch 使用相同的差异工具 - 并允许补丁成功吗?
        • 单行:svn patch &lt;(svn diff)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 2010-12-07
        • 2012-07-16
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        • 2017-06-07
        相关资源
        最近更新 更多