patch
に.orig
および.rej
ファイルを生成しないように指示することはできますか?パッチがこれらを作成するのは非常に不愉快です。
_-pN
_以外のオプションをpatch
に指定しない場合、パッチが正しく適用されなかった場合にのみ、これらのファイルが作成されます。
したがって、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 -
オプションをコマンドに追加します。
--no-backup-if-mismatch
オプションは、「。orig」ファイルを回避します。
また、--merge
オプション。ファイル内の競合を作成します。
すべてのケースで、マージが圧倒的になった場合に、すぐに良好な状態に戻すための何らかの方法が必要です。
パッチv2.5.4で動かなくなっており、-r -
を指定すると、-
という名前の拒否ファイルが作成されます。
--reject-file=
、つまり空の値が原因でパッチが失敗し、終了コード2
[〜#〜] if [〜#〜]が拒否ファイルを書き込もうとしたことがわかりました。拒否がなければ、期待どおりに機能します。古いバージョンのパッチの完全な解決策ではありませんが、状況によってはこれが許容可能または望ましい場合があります。
私が思いつくことができた最高のもの(確かに敷物の下の汚れを掃除する方法)は、-r <tmpfile>
を使用することです、すなわち:
# patch -r /tmp/deleteme.rej -i patchfile filetobepatched
v2.5.8以降、-r -
は実際に-
ファイルを作成します。