web-dev-qa-db-ja.com

* .origおよび* .rejファイルを生成せずに「パッチ」を実行する

patch.origおよび.rejファイルを生成しないように指示することはできますか?パッチがこれらを作成するのは非常に不愉快です。

20
TheLegassis

_-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 [〜#〜] ツールに合わせて調整することもできます。

14
Warren Young

バックアップを作成しないようにパッチに指示するには、-bおよび--backup-...オプションを省略します。

.rejファイルを作成しないように指示するには、-r -オプションをコマンドに追加します。

7
Serge

--no-backup-if-mismatchオプションは、「。orig」ファイルを回避します。

また、--mergeオプション。ファイル内の競合を作成します。

すべてのケースで、マージが圧倒的になった場合に、すぐに良好な状態に戻すための何らかの方法が必要です。

3

パッチv2.5.4で動かなくなっており、-r -を指定すると、-という名前の拒否ファイルが作成されます。

--reject-file=、つまり空の値が原因でパッチが失敗し、終了コード2[〜#〜] if [〜#〜]が拒否ファイルを書き込もうとしたことがわかりました。拒否がなければ、期待どおりに機能します。古いバージョンのパッチの完全な解決策ではありませんが、状況によってはこれが許容可能または望ましい場合があります。

1
AnyDev

私が思いつくことができた最高のもの(確かに敷物の下の汚れを掃除する方法)は、-r <tmpfile>を使用することです、すなわち:

# patch -r /tmp/deleteme.rej -i patchfile filetobepatched

v2.5.8以降、-r -は実際に-ファイルを作成します。

0
PJ_Finnegan