작업 디렉토리에서 -p0 패치를 어떻게 적용 할 수 있습니까?


26

사용하려는 절대 경로가있는 패치가 있습니다. 즉, 처음 몇 줄은 다음과 같습니다.

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


대신 패치 자체를 편집하겠습니다.
Braiam

@Braiam 패치에 어떤 특정 편집을해야합니까? 기본적으로 patch명령 에서 대상 경로를 지정하지 않아도 될지 궁금합니다 .
Sparhawk

문맥 좀주세요. 이 패치를 실행중인 시스템에 적용하려고합니까? 그렇다면 왜 그렇습니까? 배포판 / OS는 무엇입니까? 이 패치는 무엇을합니까? KDE에 대한 패치처럼 보입니다. 어떤 구성 요소? 일반적으로 배포판에서 패치를 적용하지 않으면 패치가 적용된 소스에서 관련 패키지를 다시 작성해야합니다. 패스의 앞 부분을 트리밍 할 수 있습니다. 문제가되지 않습니다. 자르는 정도는 소스의 모양에 따라 다릅니다.
Faheem Mitha 2

1
@FaheemMitha 예, Arch / KDE와 함께 실행 중입니다. 이 버그 를 수정합니다 . 변경 사항을 수동으로 적용하면 수정 사항이 작동합니다. 그러나 테스트 파일 로이 문제를 복제 할 수 있기 때문에이 경우 컨텍스트가 그렇게 중요하다고 생각하지 않습니다 /tmp/foo. 에 적용되는 일반적인 답변에 더 관심이 patch있습니다.
Sparhawk

답변:


35

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

절대 경로가 포함 된 패치를 적용하려면

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

최신 버전의 GNU 패치에서는 간단히

sudo patch -d/ -p0 <foo.patch

알았어. 그러나 cd /usr대상 파일이이 디렉토리에 있음에도 불구하고 명령을 확인하면 실패했습니다.
Sparhawk

@Sparhawk 죄송합니다. 설명이 일부 잘못되었습니다. 테스트는 다음과 같습니다. 현재 디렉토리가 아닌 /경우 ..구성 요소를 포함하는 절대 경로 또는 경로를 거부하십시오 .
Gilles 'SO- 악의를 그만두십시오

7
또는 간단히 말해서sudo patch -d/ -p0 <foo.patch
Qian

@TheoYou 당시에 그 의견을 놓쳤습니다. 답변으로 작성해야합니다.
Sparhawk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.