6

朝、PERFORCE クライアントを同期する前に、差分を読み、影響を受ける変更リストのメッセージをログに記録したいと思います。残念ながら、P4V または P4V を使用してそのような変更リストを一覧表示する簡単な方法を見つけることができませんp4 changes。ただし、単純なものが欠けていると思います。

最後にクライアントを同期してから送信されたすべての変更リストを一覧表示する方法はありますか? 単一のチェンジリストの場合と同様に、以前のデポ リビジョンから完全な説明と差分を取得できれば、p4 describeさらに良いでしょう。

4

6 に答える 6

9

簡単な答えは次のとおりです。

p4 changes -l "...#>have"

シェルがリダイレクトを行わないようにするには、引用符が必要です。

変更を簡単に繰り返し、それぞれに対して「p4 describe」を呼び出すことができます。

「p4 diff2」を使用して完全な差分を取得できます (unidiff が必要であると仮定します)。

p4 diff2 -du ...#have ...#head

しかし、それではチェンジリストごとの差分は得られません。

于 2009-07-27T11:46:51.007 に答える
4

注意してください!

p4 changes "...#>have"

新規/追加されたファイルのみを含む変更リストは表示されません。

あなたの最善の策は、最後の同期ポイントをキャッシュすることです。

HEAD=`p4 counter change`
if [ -f lastbuild.txt ]
then
  OLDHEAD=`cat lastbuild.txt`
else
  OLDHEAD=`p4 changes -m1 ...#have`
  echo lastbuild.txt not found!  I will guess that your last sync was @$OLDHEAD
fi
p4 changes ...@$OLDHEAD,$HEAD > changes.txt
# -snip- review changes.txt, perhaps prompt "Continue with sync to $HEAD?"
p4 sync ...@$HEAD
echo $HEAD > lastbuild.txt

この方法では、最後に同期ポイント キャッシュを更新してからチェンジリストをサブミットまたはチェリーピック同期した場合に誤検知が発生しますが、1 つ、特にすべてを含むチェンジリストを見逃すよりも、レビュー用に追加のチェンジリストをリストすることをお勧めします。新しいコード。


家でこれを試さないでください

後世のために、私が過去に試して最終的に失敗した他のいくつかのことを次に示します。

p4 changes ...#have > have.txt
p4 changes ...#head > head.txt
diff have.txt head.txt

すべての追加を含む変更リストのケースをカバーしますが、最終的な出力には、#have で削除されたファイルの古い変更リストが誤って含まれます。また、デポに多くの履歴がある場合、パフォーマンスがかなり悪くなる可能性があります。

p4 sync -n ... | cut -f1 -d' ' | p4 -x- changes -m1 | sort | uniq

かなり近くなりますが、最後に同期してからファイルが複数回編集されている場合、古い変更リストを一覧表示できません。また、同期するファイルごとに 1 回ずつデポにヒットするため、パフォーマンスが非常に低下する可能性があります。

于 2009-11-23T22:17:56.790 に答える
1

P4V の新しいバージョン (2009.2 以降、おそらく 2009.1) には、いくつかの「タスク」を含むダッシュボードと呼ばれるものがあります。これらの 1 つは、まだワークスペースに同期されていない変更リストです。

メニュー バーで、[表示] -> [ダッシュボード] に移動します。ダッシュボード タブ バーの右側に歯車アイコンがあり、オプションを設定できます。これらの 1 つは、「私のワークスペース内のファイルは最新のリビジョンではありません」です。同期されていないファイルは、変更リストごとに編成されます。

于 2010-08-12T19:13:08.177 に答える
0

時間が経つにつれて、Perforce の使用に関する小さなコード スニペットをたくさん作成することになるかもしれません。それらすべてを、追加のカスタム手順の有無にかかわらず、p4 を呼び出してコマンドを渡すラッパー スクリプトにバンドルすることをお勧めします。

この種のラッパーを規律を持って使用している場合 (つまり、p4 を直接呼び出さない場合)、同期した最後の変更を保存するのは簡単です。

于 2009-06-30T18:10:50.833 に答える
0

DOS バッチ ファイルでは、次のようなことができます。

FOR /F "tokens=2 delims= " %%a IN ('p4 changes -m1') DO (SET TO_CHANGELIST=%%a)
FOR /F "tokens=2 delims= " %%a IN ('p4 changes -m1 -c <client_name>')
       DO (SET FROM_CHANGELIST=%%a)

p4 changes -s submitted @%TO_CHANGELIST%,@%FROM_CHANGELIST%

クライアントで最後に同期されたチェンジリストと最後にサブミットされたチェンジリストの間にあるすべての p4 チェンジリストのリストが表示されます。

変更リストの説明と差分を取得する場合は、最後の行を次のように置き換えることができます。

FOR /F "tokens=2 delims= " %%a 
     IN ('p4 changes -s submitted @%TO_CHANGELIST%,@%FROM_CHANGELIST%') 
     DO (p4 describe %%a)

確認しやすいように、このデータをファイルにパイプすることをお勧めします。

于 2009-07-01T00:55:56.880 に答える
0

この質問に対する答えはまったく役に立ちますか?

私が覚えていることから、同期した最後の日付/時刻を保存し、出力を解析してp4 changes -t、日付の後にそれらの変更リストを表示する必要があります。

于 2009-06-30T16:25:44.370 に答える