シナリオ:作業ファイルにきれいに適用されるパッチファイルがありますが、パッチからのすべての変更が必要ではありません。
通常、私はvim example.patch
、不要な変更を削除して適用しますpatch -p0 -i example.patch
しかし、パッチがきれいに適用されないことがあり、もう一度やり直さなければなりません。
ユーザーがパッチの一部を編集および削除でき、クリーンに適用できるパッチファイルエディターはありますか?
Emacsでdiffファイルを開き、エディターを「diff」モードにすると、実際にパッチを編集でき、ハンクマーカーがスマートに更新されます。私には本当にうまくいきます!
非インタラクティブなソリューションを探している場合は、rediff
のpatchutils
が役立ちます。
man
の説明は次のとおりです。
rediff
を使用して、手動で編集した統合diffを修正できます。編集するdiffのコピーを取り、オフセットまたはカウント(「@@」で始まる行)を変更せずに編集します。次にrediffを実行して、元のdiffファイルの名前と編集したファイルの名前を伝え、編集したdiffファイルを出力しますが、オフセットとカウントは修正されています。小さなスクリプト
editdiff
は、差分ファイルをインプレイス編集するために提供されています。現在処理されている変更のタイプは次のとおりです。
- ファイルのコンテンツ行のテキストを変更する(もちろん)。
- 新しい行の挿入または削除を追加します。
- コンテキスト行の追加、変更、または削除。コンテキストホライズンのラインは、オフセットやカウントを調整することで処理されます。
- 単一のハンクを追加します(@@接頭辞セクション)。
- 複数のハンクを削除します(@@で始まるセクション)。
その説明に基づいて、recountdiff
は、unified diffを修正するための潜在的な候補にもなります。
どのSCMを使用していますか? Gitを使用している場合:
実際のパッチを生成する前に、git add -p
を使用して、変更の一部のみを追加します。関連する変更のみで小さなコミットを生成することをお勧めします(ただし、一部の組織ではこれが気に入らず、メガコミットしか許可しない)。
パッチをすでに適用している場合は、git add -p
を使用して、保持するコードの部分をインデックスに追加します。残りをコミットして破棄するか(git co .
)、または隠しておくことができます(git stash
)。
編集(git add -pコメントに基づく)
git add -p
を使用すると、sオプションを使用してハンクを小さな部分に分割できます。詳細を確認する必要がある場合は、eオプションを使用して編集する必要があります。これにより、gitconfigエディターに移動し、指示が表示されます。ハンクの編集方法について。パッチファイルを手動で編集しないでください。あなたの場合、 ipatch のようなインタラクティブなツールを試して、パッチを塊ごとに適用することができます