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


20

ファイルpatchを生成.origしないように指示することは可能.rejですか?パッチがこれらを作成するのは非常に迷惑です。

回答:


14

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必要なファイルを削除する可能性があるため、長い名前がこれを誤って実行しないように部分的に保証しているため、これを呼び出します。ただし、正直に言うと、通常はを入力して実行cleanTabEnterします。これPATHは、開発マシンでこのスクリプトを見つけるのに十分です。

確認する追加のパターンは、マージ操作中に同じ問題が発生したときに選択しバージョン管理システムによって出力されたファイル用です。VCS / SCMツールに合わせて調整することもできます。


7

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

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


4
これは私にとってはうまくいきません。「-」というファイルに拒否を入れるだけです。これは非常に迷惑なファイル名です。Macでバージョン2.5.8を使用しています。
rjmunro

GNU patch 2.6Macで問題なく動作している可能性があります-r /dev/null
Stuart Cardall

3

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

また--merge、ファイル内の競合を引き起こすオプションを試すこともできます。

すべての場合において、マージが圧倒的になった場合、すぐに適切な状態に戻る方法が必要です。


1

パッチv2.5.4で立ち往生しています -r -という名前の拒否ファイルを作成するます-

私は、ことがわかっ--reject-file=つまり空の値が終了コードで失敗したパッチを起こし2 たIFそれはファイルを拒否書き込もうとします。拒否がない場合は、期待どおりに機能します。古いバージョンのパッチに対する完全なソリューションではありませんが、状況によってはこれが許容されるか、望ましい場合があります。


0

私が思いつくことのできる最善の方法(確かにラグの下の汚れを一掃する方法)は、を使用することです-r <tmpfile>。すなわち:

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

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


-3

patch -p1 -B / dev / null -r-<file.patch


-1:これは非常に悪いアドバイスです。まず、-Bフラグは、コマンドからのように*.orig出力を/dev/nullに送信しません。通常のユーザーがのようなファイルに書き込むことができないということが起こります/dev/nullfoo.cpp。これをルートとして実行すると、/dev代わりにツリーにジャンクが入ります。第二に-r -*.rejファイルを抑制しません。偽の-Bフラグによるエラーが原因で、現在のディレクトリで呼び出されるファイルを作成するなしで実際に何を行うかを示すことができないため-B、それを行うように見えます-
ウォーレンヤング

1
@WarrenYoungによると、man patch「-rデフォルトの.rejファイルの代わりにrejectfileに拒否を配置します。rejectfileが-の場合、拒否を破棄します。」
リンボペン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.