작업 디렉토리에서 -p0 패치를 적용하는 방법은 무엇입니까?

작업 디렉토리에서 -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작업 디렉터리에서 절대 경로를 사용하는 방법이 있나요 ?

답변1

GNU 패치의 소스 코드를 보면 이 동작은 버전 2.7부터 내장되어 있습니다. GNU 패치 2.7.1부터 ..현재 디렉터리가 루트 디렉터리가 아닌 이상 포함되지 않은 상대 경로만 허용됩니다.

절대 경로가 포함된 패치를 적용하려면 다음을 사용할 수 있습니다.

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

최신 버전의 GNU 패치에서는 간단히 다음을 수행할 수 있습니다.

sudo patch -d/ -p0 <foo.patch

답변2

최소한 GNU 패치 2.7.6에서는 파일 이름을 지정할 수 있습니다.

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

관련 정보