차이점 패치 적용

차이점 패치 적용

나는 Linux에서 어떤 것도 패치한 적이 없으며 그 사람이 무엇을 썼는지 정확히 알 수 없습니다.이 게시물(두 번째 문단)은 다음을 의미합니다. 대상 소스 qemu는 github에서 왔으며 적용할 변경 사항은 다음과 같습니다.

diff --git a/linux-user/flatload.c b/linux-user/flatload.c
index 58f679e..c13a201 100644
--- a/linux-user/flatload.c
+++ b/linux-user/flatload.c
@@ -44,7 +44,7 @@
 #define ntohl(x) be32_to_cpu(x)
 #include 
 
-//#define DEBUG
+#define DEBUG
 
 #ifdef DEBUG
 #define        DBG_FLT(...)    printf(__VA_ARGS__)

이것은 나에게 긴 diff명령처럼 보이지만 실행하려고 하면 실패합니다. 검색을 한 후에는 ie로 저장 qemu.patch하고 실행 해야 했지만 patch몇 가지 조합을 시도한 후에도 실패했습니다.

이런 경우 위의 코드 조각으로 어떻게 해야 합니까?

답변1

이것은 실제로매우 짧은차이점 명령. 해당 줄을 삭제 //#define DEBUG하고 #define DEBUG.

이 diff 형식에서는 Single로 시작하는 줄이 -제거되고 +Single로 시작하는 줄이 추가됩니다. 다른 줄은 컨텍스트용이며 @@파일에 대한 오프셋과 참조된 줄 수를 알려줍니다. (세 줄은 +++ ---어떤 파일이 수정되었는지 알려줍니다.)

패치 적용이 실패하는 두 가지 일반적인 이유는 다음과 같습니다.

  1. 실제 영향을 받는 라인이 변경되었거나
  2. 이 줄 주변의 컨텍스트가 변경되었습니다(아마도너무 많은 변화, 패치는 일반적으로 "흐림" 알고리즘을 사용하기 때문입니다.

이 경우 가장 쉬운 방법은 코드 섹션(파일의 linux-user/flatload.c첫 번째 줄에서 볼 수 있듯이)을 수동으로 살펴보고 주석 처리된 항목이 있는지 확인한 #define DEBUG다음 //주석 문자를 제거하는 것입니다.

코드를 직접 살펴보면 문제가 실제로 원인 #3일 수 있다는 사실을 발견했습니다. 패치가 렌더링되어서는 안 되는 방식으로 렌더링되었기 때문에 패치가 손상되었습니다. 내가 방금 말한 것을 보셨나요 #include? 내부에원본 소스, 그것은 말한다 #include <target_flat.h>. 패치를 발견한 블로깅 소프트웨어는 그것이 <target_flat.h>의심스러운 HTML 태그라고 생각하고 작성자가 눈치채지 못하게 조용히 제거했을 수도 있습니다.

답변2

git패치는 특히 를 사용하여 생성된 것처럼 보입니다.git diff명령. 따라서 git 도구를 사용하는 것이 더 나을 것입니다(구체적으로git apply) 대상 파일에 패치하려면 다음을 수행하세요.

git apply qemu.patch

관련 정보