0

構成ファイルに行を追加する自動化された方法が必要です。以前diffは、を適用したい.diffファイルを作成していましたpatch。ただし、パッチを適用する必要のあるファイルが他の場所でわずかに変更されている可能性があります。たとえば、構成ファイルの他の場所に他の行が追加されています。

私はそれpatchが実際にこれについて賢明であり、パッチが競合なしでまだ適用できるかどうかを理解すると思いましたが、元のファイルとわずかに異なる構成ファイルにパッチを適用しようとするとエラーが発生します。

patch渡す必要がある、またはdiff厳密さを緩和するために必要な追加のフラグはありますか?を使用して.diffファイルを生成しています

diff -ruN oldfile.conf newfile.conf > mypatch.diff

次に、を使用してパッチを適用します

patch myconfig.conf mypatch.diff

私が欲しいのは、パッチがパッチをかなり自由に適用しようとすることです。それが方法がわからない場合は、警告を返すだけで、エラーは返しません。現在、次のエラーが発生しています。

jeroen@jeroen-ubuntu:~/Desktop$ diff -ruN default.conf default_new.conf > mypatch.diff
jeroen@jeroen-ubuntu:~/Desktop$ patch default2.conf mypatch.diff 
patching file default2.conf
Hunk #1 FAILED at 28.
1 out of 1 hunk FAILED -- saving rejects to file default2.conf.rej
jeroen@jeroen-ubuntu:~/Desktop$
4

1 に答える 1

2

パッチは実際にはこれについて賢明であり、パッチを競合なしで適用できるかどうかを判断すると思いましたが、元のファイルとは少し異なる構成ファイルにパッチを適用しようとするとエラーが発生します。

実際、それは成り立ちます。ただし、それは「わずかに異なる」という定義に大きく依存します。基本的に、変更はパッチによって変更された場所から遠く離れている必要があります。

-F引数を使ってパッチを呼び出してみることができます

-Fnumまたは--fuzz=num

最大ファズファクターを設定します。このオプションは、コンテキストを持つdiffにのみ適用され、ハンクをインストールする場所を探す際に、パッチがその数行までのコンテキストを無視するようにします。ファズファクターが大きいほど、パッチに障害が発生する可能性が高くなることに注意してください。デフォルトのファズ係数は2です。コンテキスト差分のコンテキストの行数以上のファズ係数(通常は3)は、すべてのコンテキストを無視します。

しかし、私はそれをお勧めしません。

必要な場合

構成ファイルに行を追加する自動化された方法

perlawkまたはed仕事のために使用することを検討しましたか?patch私はそれのための正しいツールではないと思います。

于 2012-05-18T17:53:09.430 に答える