少し前に_p4 diff
_コマンドを使用してパッチを生成しました。
しかし、適用したいので、PERFORCEでパッチを適用する方法がないことに気づきました。
_-du
_オプションを使用しなかったため、パッチはそのあいまいなPERFORCE形式であり、patch(1)
では適用できません。元の変更は失われました。また、そのパッチの長さは300kbを超えているため、手動編集は実際にはオプションではありません。
私のオプションは何ですか?パッチコンバーター、またはこれらの種類のパッチの適用を可能にするいくつかのPERFORCE拡張機能はありますか?
おそらくPerforceのdiff出力フォーマットが変更されましたが、@ RumburaKの答えは私にはうまくいきませんでした。
====
ヘッダーをdiffの+++
および---
ヘッダー形式に変換するように変更する必要がありました。
sed -Ee 's|==== (//.*)#[0-9]+(.*)|+++ \1\n--- \1|' < infile.txt > outfile.txt
infile.txtは、次のコマンドで生成されました(12335は棚上げされたチェンジリストでした):p4 describe -du -S 12345
outfile.txtは、次のコマンドで適用されました:patch -p3 -l < outfile.txt
元のコードのいくつかをテストするために、パッチに私の変更のいくつかを保存し、それらを元に戻した後、あなたの質問を見つけました...
適切なターミナルエミュレータを使用していると仮定すると、この1回の操作には最大1時間ほどかかる場合があります。
良いことは、これからはおそらく「-du」を使用することになるので、日常的にこれに遭遇することはできないということです。少なくとも私はそうするだろうと確信しています。プロンプトに従ってファイル名をコピーして貼り付けるだけです。
$ patch -i cucu.diff
can't find file to patch at input line 2
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|==== //depot/foo/boo.cpp#1 - /home/who/perforce/foo/boo.cpp ====
--------------------------
File to patch:
<double-click!> to copy
<middle-click!> to paste
File to patch: /home/who/perforce/foo/boo.cpp <CR>
おそらくパッチには100個のファイルが含まれているでしょう...クリックし続けてください:-)
Subst式(vim、sed)を探している場合:
s/.* - \(.*\) ====/+++: \1/
ただし、ソース(ファイル全体、p4 add)を追加した場合、それらのコンテンツはおそらく差分に出力されないことに注意してください。その場合、誰もそれらを再パッチすることはできません...
別の答え:p4 diff2
コマンドは-u
フラグをサポートして、GNU diff形式でdiffを生成します。
p4 help diff2
から:
-uフラグはGNU diff -u形式を使用し、異なるファイルのみを表示します。ファイル名と日付はPERFORCE構文ですが、出力はパッチプログラムで使用できます。