Perforceツリーで追跡されていないファイルを見つける方法は?(svn statusのアナログ)


87

誰かがPerforceツリーで追跡されていない(実際には追加されていない)ファイルを見つけるためのスクリプトまたはエイリアスを持っていますか?

編集:2009年1月のリリースでP4Vがこれに対するサポートを追加したように見えるので、私はこれについて承認された回答を更新しました。


11
最もよく使われている企業のSCMツールにこの機能がないのはどうしてでしょうか。おそらく、すべての開発者がGUIのみを使用しています。
ソリン

3
大声で叫ぶためのああ!!!! 受け入れられたのp4 statusは、追跡されていないファイルを見つけるだけではなく、実際に追跡を開始します。すなわちp4 status1名前から疑うだろうとして、読み取り専用のクエリではなく、実際のものを変更するコマンドである-ないワークスペースファイル。これは、ステータスコマンドが行うべきことではなく、何をすべきかではありませんsvn status。私が見つけることsvn statusができる最も近いものはp4 reconcile -na--aは「追加する必要があるファイル」と言うことで、-nは「実際には何も変更しない」と言うことです。///私はもともともっと強いことを言った。
Krazy Glew 16年

1
私はstackoverflow.com/questions/9642531/…を復活させました。これは誤ってstackoverflow.com/questions/9272/…の複製としてマークされましたが、新しい質問として(git / hg / bzr / svnのようなものと同等のp4コマンドは何ですか?ステータス?(ヒント:ではないp4 status、自分で答えた方が良い歓迎
Krazy Glew

両方p4 reconcilep4 statusしながら、地獄のように遅いですgit status完成は1-3秒で実行します。
zwcloud

回答:


81

編集:p4 status今すぐ使用してください。フープをジャンプする必要はもうありません。@ColonelPanicの回答を参照してください。

2009年1月バージョンのP4Vでは、ワークスペースツリーの任意のフォルダーを右クリックして、[オフライン作業の調整...]をクリックできます。

これにより、少し処理が行われ、チェックアウトされていないが、デポバージョンとは異なる、またはチェックインされていないファイルの分割ツリービューが表示されます。それがもたらす他のいくつかのカテゴリがあるかもしれません。

このビューでファイルを右クリックして、チェックアウト、追加、または元に戻すことができます。

それは私のお尻を数回救った非常に便利なツールです。

編集:ああ、スクリプトについて具体的に尋ねられた質問ですが、念のため、この回答はここに残しておきます。


:この問題のPowerShellのソリューションを追加しましたstackoverflow.com/questions/3217152/...
tenpn

これは、すべてのファイルをリポジトリのバージョンと比較しますか?大きなリポジトリと遅い接続(自宅で作業している場合)があります。これは永遠にかかる可能性があります!
gdw2 2012年

完全な差分だとは思いませんが、速くはありません。
tenpn 2012年

10
大声で叫ぶためのああ!!!! p4 status追跡されていないファイルを見つけるだけでなく、実際に追跡を開始します。すなわちp4 status1名前から疑うだろうとして、読み取り専用のクエリではなく、実際のものを変更するコマンドである-ないワークスペースファイル。これは、ステータスコマンドが行うべきことではなく、何をすべきかではありませんsvn status。私が見つけることsvn statusができる最も近いものはp4 reconcile -na--aは「追加する必要があるファイル」と言うことで、-nは「実際には何も変更しない」と言うことです。///私はもともともっと強いことを言った。
Krazy Glew 2016年

1
p4 status基本的にはの同義語ですp4 reconcile -n。おそらくあなたはp4 status -Aどちらを実行しましたp4 reconcileか?
Samwise

50

Linux、またはWindowsにgnu-toolsがインストールされている場合:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null

これは、すべてのアカウンティングされていないファイルのエラーメッセージを表示します。その出力をキャプチャしたい場合:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile

1
stderrをstdoutにリダイレクトすると、追加のフィルタリングやその他の操作を実行できます。たとえば、Javaファイルのスクロール可能なリストを表示するには、次のようにします。-type f -print0 | xargs -0 p4 fstat 2>&1> / dev / null | grep '\ .java' | 少ない
ジョン・ナダル

2
これは私の60Kファイルのワークスペースでめちゃくちゃ時間がかかります。同じ作業を10秒未満で実行するpythonスクリプトを作成しました:p5。また、.p4ignore追跡されていない/変更された/削除されたファイルをプレビューし、自動的に編集することもできます。
hamstergene 2013年

@hamstergene、とてもいい!
Mark Harrison

誰かが興味を持っている場合に正確にそれを行う小さなスクリプトを書きました(dir引数、最大深度引数、およびstdoutへの出力を含む)。
Arnon Zilca、2015

ありがとう。これは重宝しました!これはシンボリックリンク(find . -type l)を処理せず、@または%文字が含まれているために強制的に追加されたP4ファイルの誤解を招く出力を提供することに注意してください。ただし、そのようなファイルは少数派であるため、これらのエッジケースの手動レビューはほとんどの場合に機能します。
CJBS 2015年

19

Unixの場合:

find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print $1}'

これにより、クライアントまたはPerforceデポに追加されていないファイルのリストが印刷されます。! -name '*~'〜で終わるファイルを除外してきました。


12

ああ、Perforceクラシックの1つ:)はい、これはデフォルトのコマンドに組み込まれている簡単な方法がまだないのは本当にうんざりです。

最も簡単な方法は、コマンドを実行してクライアントのルートの下にあるすべてのファイルを見つけ、それらをデポに追加することです。すべての新しいファイルの変更リストが作成され、既存のファイルは無視されます。

たとえば、dir / s / b / AD | p4 -x-追加

(nixコマンドラインから 'find。-type f -print'を使用)。

(コンソールまたはファイル内の)物理リストが必要な場合は、diffの結果をパイプで渡すことができます(または、変更リストにもそれらが必要な場合は追加します)。

これをP4Win内で実行している場合は、$ rを使用して現在のワークスペースのクライアントルートを置き換えることができます。


11

svn statusまたはの類似物はありgit statusますか?

はい、しかし

PERFORCEバージョン2012.1以降、コマンドがp4 statusあり、P4Vには「オフライン作業の調整」があります。ただし、どちらも非常に遅いです。無関係なファイルを除外するには、https://stackoverflow.com/a/13126496/284795p4ignore.txtに従ってファイル を作成する必要があります


1
p4 status2012.1リリース以降、いくつかのパフォーマンスが向上しています。p4 statusパフォーマンスの問題が原因で遠ざかっている場合は、もう一度テストして、動作を確認することをお勧めします。
ブライアンペンドルトン

7

受け入れられた回答や他の回答のいくつかは、重大な問題であると私が思うことを持っているので、回答を追加せざるを得ません:彼らは読み取り専用のクエリコマンドと変更を加えるコマンドの違いを理解していません。

私はこの回答にクレジットは期待していませんが、受け入れられたがIMHOの間違った回答に従うことで、他の人が時間を無駄にしたり、間違いを犯したりするのを防ぐのに役立つことを願っています。

--- +ブリーフ

おそらく、追跡されていないすべてのファイルをPERFORCEワークスペースで見つける最も便利な方法はp4 reconcile -naです。

-a 「リポジトリにない、つまり追加する必要があるファイルをください」と言います。

-n「何も変更しないでください」-つまり、予行演習。(メッセージは「追加のために開かれました」と言うかもしれませんが、精神的には「-nでなければ追加のために開かれる」と解釈する必要があります)

ただ追加することかもしれないの必要性をファイルするだけでなく、削除することかもしれないの必要性をファイル、または経由して、編集用に開かれることなく、変更されているではない-オフラインの間に行われたすべてのローカルの変更を見つけるためにおそらく最も便利な方法p4 editですp4 reconcile -n

いくつかの回答がスクリプトを提供しましたp4 fstat。これらのスクリプトのすべてを検証したわけではありませんが、perforceコマンドの不備を補うために同様のスクリプトを使用することがよくあります。p4 reconcile -nたとえば、Perforceデポパスやワークスペースパスではなくローカルパスが必要であることがよくあります。

--- +警告

p4 status 他のバージョン管理システムのステータスコマンドに対応するものではありません。

p4 status読み取り専用のクエリではありません。p4 statusと同じ種類の変更が実際に検出さp4 reconcileれ、リポジトリに追加されます。p4 status-nような予行演習オプションがないようですp4 reconcile

もしそうならp4 status、ファイルを見て、「ああ、私はそれらは必要ない」と思います、そしてp4 revert同じワークスペースで編集を続けたいのであれば、それらを使わなければなりません。またはp4 status、チェンジセットに追加された変更は次回チェックされます。

ローカルワークスペースとデポパス名の一部の詳細を除いて、p4 statusではなくを使用する理由はほとんどないか、まったくないようp4 reconcile -nです。

読み取り専用以外のコマンドで「ステータス」を選択した人が、英語や他のバージョン管理ツールのコマンドが制限されていたとしか想像できません。

--- + P4VGUI

GUI p4vで、reconcileコマンドは、追加、削除、または編集のために開く必要があるローカル変更を検出します。幸い、デフォルトではチェンジリストに追加されません。ただし、変更をコミットしたくない場合は、検査後に調整ウィンドウを閉じるように注意することもできます。


p4ステータスはファイルを追加しないようです。これは、「調整-n」と同様に機能し、文書化されています。それは物事を変えてよろしいですか?
kdubs 2018

4

リポジトリとは異なるワークスペース内のファイルをバックアップするツールで以下を使用します(Windowsの場合)。埋め込まれた空白、星、パーセント、ハッシュマークなど、Perforceがあまり気に入らない奇妙なケースを処理します。

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- have 1>NUL:

" dir / S / B / AD "は、ディレクトリ(/ AD)を除いて、このフォルダー(/ S)以下のすべてのファイルを"ベア"形式(/ B)でリストします。「sed」は危険な文字を「%xx」形式(HTML形式)に変更し、「p4 have」コマンドはサーバーに対してこのリスト(「-x-」)をチェックして、リポジトリに実際に配置されているファイルに関するすべてを破棄します( " 1> NUL: ")。結果は次のような一連の行になります。

Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.

エボラ!


これは優れたソリューションであり、P4バージョン2015.1でも引き続き機能します
Rian Sanderson

とても早い!find / xargsはメモリ不足で動作が遅くなります。.batファイルに追加するときは、2つの%を思い出してください。
kevinf

4

または、P4Winから、左側のビューパネルにある「デポにないローカルファイル」オプションを使用します。

私はP4Vをあまり使用していませんが、ワークスペースビュータブのフィルタードロップダウンで[ローカルワークスペースファイルを非表示]を選択するのと同じことだと思います。p4help fstat

P4V 2015.1では、これらのオプションは次のようにフィルターボタンの下にあります。 ここに画像の説明を入力してください


悲しいことに、これは現在のディレクトリにあるファイルのみを表示します:(
JP P.

2

Quick 'n Dirty:p4vで問題のフォルダーを右クリックし、その下にあるすべてのファイルを新しいチェンジリストに追加します。チェンジリストには、現在デポの一部ではないすべてのファイルが含まれます。


1

次のコマンドは、ステータスのような出力を生成しますが、svn statusor とまったく同等のものはなくgit status、各ファイルのステータスの1行の要約を提供します。

  • p4 status
  • p4 opened
  • p4 diff -ds

0

コメントするのに十分な評判ポイントはありませんが、Rossのソリューションには、追加用に開いているファイルもリストされています。あなたはおそらく彼の答えを使ってワークスペースをきれいにしたくないでしょう。

以下の用途p4 fstat(感謝マーク・ハリソン)の代わりにp4 have、とリストデポでないファイルアドオンのために開かれていません。

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s/\*/%2A/g" | p4 -x- fstat 2>&1 | sed -n -e "s/ - no such file[(]s[)]\.$//gp"

===ジャック


0

高速な方法ですが、オーソドックスではありません。コードベースが新しいファイルを追加したり、ビューを頻繁に変更したりしない場合は、チェックアウトからローカルの「git」リポジトリを作成できます。クリーンなperforce同期から、git init、ローカルですべてのファイルを追加してコミットします。Gitステータスは高速で、以前にコミットされていないファイルが表示されます。


0

このp4 fstatコマンドを使用するfindと、次のPerlの例のように、ファイルがワークスペースに存在するかどうかをテストし、と組み合わせてチェックするファイルを見つけることができます。

// throw the output of p4 fstat to a 'output file'
// find:
//  -type f  :-  only look at files,
//  -print0  :-  terminate strings with \0s to support filenames with spaces
// xargs:
//  Groups its input into command lines,
//  -0       :-  read input strings terminated with \0s
// p4:
//  fstat    :-  fetch workspace stat on files

my $status=system "(find . -type f -print0 | xargs -0 p4 fstat > /dev/null) >& $outputFile";

// read output file
open F1, $outputFile or die "$!\n";

// iterate over all the lines in F1
while (<F1>) {
  // remove trailing whitespace
  chomp $_;

  // grep lines which has 'no such file' or 'not in client'
  if($_ =~ m/no such file/ || $_ =~ m/not in client/){

     // Remove the content after '-'
     $_=~ s/-\s.*//g;

     // below line is optional. Check ur output file for more clarity.
     $_=~ s/^.\///g;

     print "$_\n";
  }
}

close F1;

またはあなたが使うことができます p4 reconcile -n -m ...

「削除のために開かれた」場合、ワークスペースから削除されています。上記のコマンドはプレビューモード(-n)で実行されていることに注意してください。


1
答えとして説明のないコードを投げるだけでなく、OPがコードを理解し、何かを学ぶのに役立つ説明を追加してください。:)
マーカス

0

Linux、Mac、Windowsのいずれかで動作するものが必要でした。それで、私はそのためのPythonスクリプトを書きました。基本的な考え方は、ファイルを反復処理しp4 fstat、それぞれに対して実行することです。(もちろん、依存関係とtmpフォルダーは無視します)

あなたはそれをここで見つけることができます:https//gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9


-1

P4Vの[表示]メニュー項目で[フォルダ内のファイル]を選択すると、右側のペインに新しいタブが表示されます。タブの右端に小さなアイコンがあり、2つのアイコンが付いた「Files in Folder」というウィンドウが表示されます。じょうごのような左側のアイコンを選択すると、いくつかのオプションが表示されます。「デポにないアイテムを表示」を選択すると、フォルダ内のすべてのファイルが表示されます。次に、追加したいファイルを右クリックして、[Mark for Add ...]を選択します。[保留中]タブで確認できます。通常どおりに送信してください(Ctrl + S)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.