回答:
patch
以外-pN
にオプションを指定しない場合、パッチが正常に適用されない場合にのみそれらのファイルが作成されます。
したがって、1つのオプションは、不良パッチの作成(または受け入れ)を停止することです。:)
現実の世界に戻ると、これは機能です。場合はpatch(1)
、元のファイルにパッチセグメントを適用するために失敗し、それが永続としてコピーアウト一時的な元のファイルを保存し*.orig
、に拒否されたセグメントをダンプ*.rej
し、パッチセグメントを適用しようとし続けています。アイデアは、*.rej
ファイルを開いて、パッチを適用したファイルに断片をコピーすることで、パッチプロセスを手動で完了することができるということです。この*.orig
ファイルは、パッチプロセスが誤って何かを破壊し、元のバージョンを参照して修正する必要がある場合にも役立ちます。
*.rej
との*.orig
ファイルのテキストを使って、常に悪いパッチを修正するわけではありませんが、必要な場合に備えておくといいです。
悪いパッチを修正したら、プロジェクトルートで次のスクリプトを実行して、すぐにクリーンアップします。
#!/bin/bash
find . '(' \
-name \*-baseline -o \
-name \*-merge -o \
-name \*-original -o \
-name \*.orig -o \
-name \*.rej \
')' -delete
cleanup-after-bad-patch
必要なファイルを削除する可能性があるため、長い名前がこれを誤って実行しないように部分的に保証しているため、これを呼び出します。ただし、正直に言うと、通常はを入力して実行clean
TabEnterします。これPATH
は、開発マシンでこのスクリプトを見つけるのに十分です。
確認する追加のパターンは、マージ操作中に同じ問題が発生したときに選択したバージョン管理システムによって出力されたファイル用です。VCS / SCMツールに合わせて調整することもできます。
パッチにバックアップを作成しないように指示するには-b
、--backup-...
オプションとオプションを省略します。
.rej
ファイルを作成しないように指示するには-r -
、コマンドにオプションを追加します。
GNU patch 2.6
Macで問題なく動作している可能性があります-r /dev/null
この--no-backup-if-mismatch
オプションは、「。orig」ファイルを回避します。
また--merge
、ファイル内の競合を引き起こすオプションを試すこともできます。
すべての場合において、マージが圧倒的になった場合、すぐに適切な状態に戻る方法が必要です。
patch -p1 -B / dev / null -r-<file.patch
-B
フラグは、コマンドからのように*.orig
出力を/dev/null
に送信しません。通常のユーザーがのようなファイルに書き込むことができないということが起こります/dev/nullfoo.cpp
。これをルートとして実行すると、/dev
代わりにツリーにジャンクが入ります。第二に-r -
、*.rej
ファイルを抑制しません。偽の-B
フラグによるエラーが原因で、現在のディレクトリで呼び出されるファイルを作成するなしで実際に何を行うかを示すことができないため-B
、それを行うように見えます-
。
man patch
「-rデフォルトの.rejファイルの代わりにrejectfileに拒否を配置します。rejectfileが-の場合、拒否を破棄します。」