「パッチ」は非対称コンテキストで動作しますか?

「パッチ」は非対称コンテキストで動作しますか?

私はファイルを持っていますa

This
file
does
have
an error
in it
that
needs
to be
fixed.

そして同様のファイルb

This
file
does
have
no error
in it
that
needs
to be
fixed.

以下を使用して統合diffを作成できますdiff -u a b

--- a   2018-01-03 14:20:22 +0100
+++ b   2018-01-03 14:20:37 +0100
@@ -2,7 +2,7 @@
 file
 does
 have
-an error
+no error
 in it
 that
 needs

以下を使用して、コンテキストを各側で1行に減らすこともできますdiff -u1 a b

--- a   2018-01-03 14:20:22 +0100
+++ b   2018-01-03 14:20:37 +0100
@@ -4,3 +4,3 @@
 have
-an error
+no error
 in it

どちらのパッチもきれいに適用できますpatch。ただし、diff非対称コンテキストでパッチを生成する方法が見つかりませんでした。私はそれができないと仮定しています。それで、変更の前後に2行のコンテキストを持つパッチを作成するために、いくつかのコンテキストを手動で削除してみました。

--- a   2018-01-03 14:20:22 +0100
+++ b   2018-01-03 14:20:37 +0100
@@ -3,4 +3,4 @@
 does
 have
-an error
+no error
 in it

これは私には効果があるようです。統合フォーマット。ただし、patch苦情を申し立てるには、ファズテストに頼る必要があります。

patching file a
Hunk #1 succeeded at 3 with fuzz 1.

私は何か間違っているのでしょうか、それとも(GNU)を作成する方法がないので、誰も使用することを想像できpatchませんでした。diff

また、興味深いのは、非対称性を逆にすると(たとえば、前に1行、後に2行)、パッチが機能することです。

--- a   2018-01-03 14:20:22 +0100
+++ b   2018-01-03 14:20:37 +0100
@@ -4,4 +4,4 @@
 have
-an error
+no error
 in it
 that

ベストアンサー1

これPOSIX規格非対称コンテキストを生成する方法は提供されません。場合によっては、GNUパッチが間違ったパッチを受け入れるのを助けます。

しかし、質問で指摘したマンページには間違った説明があります。

現時点では、GNU diffのみがこの形式を生成でき、GNUパッチのみがこの形式のdiffを自動的に適用できます。パッチが正しく機能するには、通常、少なくとも3行のコンテキストが必要です。

エラーがまだ発生します。拡散剤情報ファイル

POSIXパッチ均一な違いを処理します。

おすすめ記事