web-dev-qa-db-ja.com

どのようにして作業ディレクトリから-p0パッチを適用できますか?

使用したい絶対パスのパッチがあります。つまり、最初の数行は次のとおりです。

--- /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

ただし、ルートディレクトリにいない場合は失敗します。

~$ 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

patchに作業ディレクトリの絶対パスを使用させる方法はありますか?

27
Sparhawk

GNUパッチのソースコードを見ると、この動作はバージョン2.7以降に組み込まれています。GNUパッチ2.7.1以降、..を含まない相対パスのみが現在のディレクトリがルートディレクトリでない限り、受け入れられます。

絶対パスを含むパッチを適用するには、次を使用できます

(cd / && Sudo patch -p0) <foo.patch

GNUパッチの最近のバージョンでは、単に

Sudo patch -d/ -p0 <foo.patch

GNU patch 2.7.6以降では、ファイル名を指定できます:

patch /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml /tmp/fix_kde_icons.patch
1
gerardw