違いパッチの適用

違いパッチの適用

私はLinuxで何もパッチを当てたことがなく、その人が何を書いたのか正確にはわかりません。この投稿(2番目の段落)は、次のことを意味します。ターゲットソース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 で始まる行が追加されます。他の行はコンテキスト用であり、@@ファイルへのオフセットと参照された行数を示します。 (3行は+++ ---どのファイルが変更されたかを示します。)

パッチ適用が失敗する2つの一般的な理由は次のとおりです。

  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

関連情報