수정하려는 디렉터리의 소스 트리를 어떻게 패치합니까?

수정하려는 디렉터리의 소스 트리를 어떻게 패치합니까?

소스 트리에는 수정된 dnsmasq-2.80test4 소스(및 git 파일)가 포함되어 있습니다.

이제 사용자의 홈 폴더에서 작업하면서 diff최신 2.86 dnsmasq 소스코드를 수정된 2.80test4에 적용하고 싶습니다.patch

그래서 .../dnsmasq-2.80test4를 사용자의 홈 디렉터리에 복사하는 것으로 시작하고 다음을 사용하여 diff 파일을 만들었습니다.

~$ diff -urN ./dnsmasq-2.80test4 ./dnsmasq-2.86 > dnsmasq-2.86.diff

~/dnsmasq-2.80test4그런 다음 다음을 사용하여 이전 폴더를 패치 하려고했습니다 .

~$ cd ./dnsmasq-2.80test4
~$ patch --dry-run -i ../dnsmasq-2.86.diff

CHANGELOG, FAQ, Makefile 및 Version에서 잘 작동합니다. Android.mk하위 디렉터리의 첫 번째 파일이 bld실패하는데 이는 큰 문제가 아닙니다. 실제 거래 차단기는 동일한 하위 디렉터리에 있는 두 번째 파일입니다.

can't find file to patch at input line 466
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|diff -ur ./dnsmasq-2.80test4/bld/get-version ./dnsmasq-2.86/bld/get-version
|--- ./dnsmasq-2.80test4/bld/get-version    2022-07-03 17:32:08.541879257 +0200
|+++ ./dnsmasq-2.86/bld/get-version 2021-09-08 22:21:22.000000000 +0200
--------------------------

해결책

작업 디렉터리를 한 수준 위로 변경하고 최신 /dnsmasq-2.86 소스 디렉터리의 이름을 다른 이름으로 바꾸면(또는 그냥 제거하면) 다음을 사용하여 패치가 이전 /dnsmasq-2.80test4 디렉터리에 올바르게 적용된 것으로 나타납니다.

~$ patch --dry-run --verbose -p0 -i dnsmasq-2.86.diff

질문

dir 대신 작업 디렉터리로 변경해야 하는 디렉터리( )에서 작업 할 수 있도록 diff및/또는 명령을 수정하려면 어떻게 해야 합니까 ?patchpatchcd ./parent/dnsmasq-2.80test4cd ./parent

관련 정보