スポンサードリンク
まずはバックアップを取っておきましょう。Linux上では次のコマンドで行います。
$ cp -a software-1.0 software-1.0.before-patch
patchを実行しましょう。次のようなコマンドになります。
$ patch -Np1 -d software-1.0 < fix-bug.patch
もし正常に動作すれば次のように出力されます。
$ patch -Np1 -d software-1.0 < fix-bug.patch patching file bar.h patching file quux.c patching file foo.txt $
上記以外のメッセージが表示される場合は「警告」もしくは「エラー」を意味します。その場合には正しくパッチが適用されていません。
「なぜ警告が表示されているのか?」「エラーの理由は何か?」を正しく理解しましょう。
正しいコマンドを入力しているか確認しましょう。
どこの行が問題箇所かは次のコマンドを入力すると教えくれます。
$ patch --dry-run -Np2 -d software-1.0 < fix-bug.patch
「-p0」のオプションを付加するのは間違っています。サブディレクトリを無視して、同じディレクトリの中にパッチを適用する全てのファイルが存在すると解釈されてしまいます。
エラーメッセージが発生する箇所を除いてパッチが正常に動作する場合は
パッチを適用する際のそれぞれの修正箇所の塊を「hunk」と呼びます。そのhunkが適用できなかったことをいみます。
もっとも簡単な確認は、次のように「--ignore-whitespace」をつけます。
$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch
仮にエラーが消えない場合には別の問題があります(そのパッチは別のバージョン向けなど)。
$ patch -Np1 -F3 -d software-1.0 < fix-bug.patch
この表示は「パッチは適用できたが、パッチファイルで指定してある適用したい行とは異なる」という意味です。
この警告は一般的には問題ありません。しかし、patchがhunkを間違った場所に導入していることを示している可能性があります。
このエラーが出る場合はパッチファイルが壊れています。もし「コピー&ペースト」によりエディタからパッチを作成した場合には注意が必要です。
「パッチファイル」は行の先頭に空白を含んでいます。「コピー&ペースト」によりパッチを作成した場合は先頭の空白が消えている場合があります。
また、サイトからパッチをダウンロードする場合にはブラウザのツールバーから「ファイル」→「保存」を利用してパッチを保存しましょう。
自分でパッチを作成する場合には、手動で作るのではなく「diff」コマンドを利用して次のように作成しましょう。
1. まず、オリジナルファイルをコピーします。
$ cp -a software-1.0 software-1.0.orig
2. 次に、「software-1.0」を修正してください。
3. 最後に、diffコマンドを利用して修正したファイルの差分を取得します。この際、そのままファイルに保存させましょう。
$ diff -Naur software-1.0.orig software-1.0 > fix-bug.patch
スポンサードリンク