`patch` はべき等性を持ちますか?

`patch` はべき等性を持ちますか?

はべき等性を持って呼び出すことができます。つまり、 を繰り返し呼び出しても を1 回呼び出した場合と同じ効果が得られるpatchようなオプションの組み合わせはありますか(空でない diff の場合)。patchpatch

答え1

一部のパッチ¹は複数回適用できるため、これを保証することはできませんが、

patch -N -r- -i your.patch

your.patchすでに適用されているハンクを無視して適用されます。

-Nすでに適用されたパッチを元に戻そうとするのを回避し、失敗したハンクをファイル-r-に保存するのをスキップします。.rej

長いオプションを持つ同等のコマンドは

patch --forward --reject-file=- --input=your.patch

この方法で実行すると、patchハンクを無視すると失敗が示されます。無視されたハンクだけが「エラー」の場合、コード 1 (少なくとも 1 つのハンクが失敗したか、マージの競合がありました) で終了します。より深刻なエラーは終了コード 2 で示されます。


¹ コンテキストのないパッチまたはハンク、または追加された行がコンテキストと一致する場合(例えば宣言の最初の数行が次の関数と一致する多態的関数を追加するパッチ。

関連情報