如何从任何工作目录应用 -p0 补丁?

Spa*_*awk 34 patch

我有一个我想使用的绝对路径的补丁。即前几行如下。

--- /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml  2014-10-10 18:47:23.000000000 +1100
+++ /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml.mod  2014-11-11 09:44:17.786200477 +1100
Run Code Online (Sandbox Code Playgroud)

但是,除非我在根目录中,否则它会失败。

~$ cd
~$ sudo patch -i /tmp/fix_kde_icons.patch -p0
Ignoring potentially dangerous file name /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml
Ignoring potentially dangerous file name /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml.mod
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
...
~$ cd /tmp
/tmp$ sudo patch -i /tmp/fix_kde_icons.patch -p0
... #same error as above
/tmp$ cd /usr
/usr$ sudo patch -i /tmp/fix_kde_icons.patch -p0
... #same error as above
/usr$ cd /
/$ sudo patch -i /tmp/fix_kde_icons.patch -p0
patching file /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml
Run Code Online (Sandbox Code Playgroud)

有没有办法在patch任何工作目录中使用绝对路径?

Gil*_*il' 43

查看 GNU 补丁的源代码,此行为是自 2.7 版以来内置的。从 GNU 补丁 2.7.1 开始,只..接受不包含的相对路径,除非当前目录是根目录。

要应用包含绝对路径的补丁,您可以使用

(cd / && sudo patch -p0) <foo.patch
Run Code Online (Sandbox Code Playgroud)

在最新版本的 GNU 补丁中,您可以简单地

sudo patch -d/ -p0 <foo.patch
Run Code Online (Sandbox Code Playgroud)

  • 或者更简单地说,`sudo patch -d/ -p0 &lt;foo.patch` (7认同)