나는 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로 시작하는 줄이 추가됩니다. 다른 줄은 컨텍스트용이며 @@
파일에 대한 오프셋과 참조된 줄 수를 알려줍니다. (세 줄은 +++
---
어떤 파일이 수정되었는지 알려줍니다.)
패치 적용이 실패하는 두 가지 일반적인 이유는 다음과 같습니다.
- 실제 영향을 받는 라인이 변경되었거나
- 이 줄 주변의 컨텍스트가 변경되었습니다(아마도너무 많은 변화, 패치는 일반적으로 "흐림" 알고리즘을 사용하기 때문입니다.
이 경우 가장 쉬운 방법은 코드 섹션(파일의 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