web-dev-qa-db-ja.com

diff / patchファイルをきれいに編集するには?パッチファイルエディターはありますか?

シナリオ:作業ファイルにきれいに適用されるパッチファイルがありますが、パッチからのすべての変更が必要ではありません。

通常、私はvim example.patch、不要な変更を削除して適用しますpatch -p0 -i example.patchしかし、パッチがきれいに適用されないことがあり、もう一度やり直さなければなりません。

ユーザーがパッチの一部を編集および削除でき、クリーンに適用できるパッチファイルエディターはありますか?

30

Emacsでdiffファイルを開き、エディターを「diff」モードにすると、実際にパッチを編集でき、ハンクマーカーがスマートに更新されます。私には本当にうまくいきます!

16
jkp

非インタラクティブなソリューションを探している場合は、rediffpatchutilsが役立ちます。

manの説明は次のとおりです。

rediffを使用して、手動で編集した統合diffを修正できます。編集するdiffのコピーを取り、オフセットまたはカウント(「@@」で始まる行)を変更せずに編集します。次にrediffを実行して、元のdiffファイルの名前と編集したファイルの名前を伝え、編集したdiffファイルを出力しますが、オフセットとカウントは修正されています。

小さなスクリプトeditdiffは、差分ファイルをインプレイス編集するために提供されています。

現在処理されている変更のタイプは次のとおりです。

  • ファイルのコンテンツ行のテキストを変更する(もちろん)。
  • 新しい行の挿入または削除を追加します。
  • コンテキスト行の追加、変更、または削除。コンテキストホライズンのラインは、オフセットやカウントを調整することで処理されます。
  • 単一のハンクを追加します(@@接頭辞セクション)。
  • 複数のハンクを削除します(@@で始まるセクション)。

その説明に基づいて、recountdiffは、unified diffを修正するための潜在的な候補にもなります。

10
slv

どのSCMを使用していますか? Gitを使用している場合:

  • 実際のパッチを生成する前に、git add -pを使用して、変更の一部のみを追加します。関連する変更のみで小さなコミットを生成することをお勧めします(ただし、一部の組織ではこれが気に入らず、メガコミットしか許可しない)。

  • パッチをすでに適用している場合は、git add -pを使用して、保持するコードの部分をインデックスに追加します。残りをコミットして破棄するか(git co .)、または隠しておくことができます(git stash)。

編集(git add -pコメントに基づく)

  • git add -pを使用すると、sオプションを使用してハンクを小さな部分に分割できます。詳細を確認する必要がある場合は、eオプションを使用して編集する必要があります。これにより、gitconfigエディターに移動し、指示が​​表示されます。ハンクの編集方法について。
2
DavidG

パッチファイルを手動で編集しないでください。あなたの場合、 ipatch のようなインタラクティブなツールを試して、パッチを塊ごとに適用することができます

1
Lifu Tang