誰かがPerforceツリーで追跡されていない(実際には追加されていない)ファイルを見つけるためのスクリプトまたはエイリアスを持っていますか?
編集:2009年1月のリリースでP4Vがこれに対するサポートを追加したように見えるので、私はこれについて承認された回答を更新しました。
誰かがPerforceツリーで追跡されていない(実際には追加されていない)ファイルを見つけるためのスクリプトまたはエイリアスを持っていますか?
編集:2009年1月のリリースでP4Vがこれに対するサポートを追加したように見えるので、私はこれについて承認された回答を更新しました。
p4 status
は、追跡されていないファイルを見つけるだけではなく、実際に追跡を開始します。すなわちp4 status
1名前から疑うだろうとして、読み取り専用のクエリではなく、実際のものを変更するコマンドである-ないワークスペースファイル。これは、ステータスコマンドが行うべきことではなく、何をすべきかではありませんsvn status
。私が見つけることsvn status
ができる最も近いものはp4 reconcile -na
--aは「追加する必要があるファイル」と言うことで、-nは「実際には何も変更しない」と言うことです。///私はもともともっと強いことを言った。
p4 status
)、自分で答えた方が良い歓迎
p4 reconcile
とp4 status
しながら、地獄のように遅いですgit status
完成は1-3秒で実行します。
回答:
編集:p4 status
今すぐ使用してください。フープをジャンプする必要はもうありません。@ColonelPanicの回答を参照してください。
2009年1月バージョンのP4Vでは、ワークスペースツリーの任意のフォルダーを右クリックして、[オフライン作業の調整...]をクリックできます。
これにより、少し処理が行われ、チェックアウトされていないが、デポバージョンとは異なる、またはチェックインされていないファイルの分割ツリービューが表示されます。それがもたらす他のいくつかのカテゴリがあるかもしれません。
このビューでファイルを右クリックして、チェックアウト、追加、または元に戻すことができます。
それは私のお尻を数回救った非常に便利なツールです。
編集:ああ、スクリプトについて具体的に尋ねられた質問ですが、念のため、この回答はここに残しておきます。
p4 status
追跡されていないファイルを見つけるだけでなく、実際に追跡を開始します。すなわちp4 status
1名前から疑うだろうとして、読み取り専用のクエリではなく、実際のものを変更するコマンドである-ないワークスペースファイル。これは、ステータスコマンドが行うべきことではなく、何をすべきかではありませんsvn status
。私が見つけることsvn status
ができる最も近いものはp4 reconcile -na
--aは「追加する必要があるファイル」と言うことで、-nは「実際には何も変更しない」と言うことです。///私はもともともっと強いことを言った。
p4 status
基本的にはの同義語ですp4 reconcile -n
。おそらくあなたはp4 status -A
どちらを実行しましたp4 reconcile
か?
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
.p4ignore
追跡されていない/変更された/削除されたファイルをプレビューし、自動的に編集することもできます。
find . -type l
)を処理せず、@
または%
文字が含まれているために強制的に追加されたP4ファイルの誤解を招く出力を提供することに注意してください。ただし、そのようなファイルは少数派であるため、これらのエッジケースの手動レビューはほとんどの場合に機能します。
ああ、Perforceクラシックの1つ:)はい、これはデフォルトのコマンドに組み込まれている簡単な方法がまだないのは本当にうんざりです。
最も簡単な方法は、コマンドを実行してクライアントのルートの下にあるすべてのファイルを見つけ、それらをデポに追加することです。すべての新しいファイルの変更リストが作成され、既存のファイルは無視されます。
たとえば、dir / s / b / AD | p4 -x-追加
(nixコマンドラインから 'find。-type f -print'を使用)。
(コンソールまたはファイル内の)物理リストが必要な場合は、diffの結果をパイプで渡すことができます(または、変更リストにもそれらが必要な場合は追加します)。
これをP4Win内で実行している場合は、$ rを使用して現在のワークスペースのクライアントルートを置き換えることができます。
svn status
またはの類似物はありgit status
ますか?
はい、しかし。
PERFORCEバージョン2012.1以降、コマンドがp4 status
あり、P4Vには「オフライン作業の調整」があります。ただし、どちらも非常に遅いです。無関係なファイルを除外するには、https://stackoverflow.com/a/13126496/284795p4ignore.txt
に従ってファイル を作成する必要があります
p4 status
2012.1リリース以降、いくつかのパフォーマンスが向上しています。p4 status
パフォーマンスの問題が原因で遠ざかっている場合は、もう一度テストして、動作を確認することをお勧めします。
受け入れられた回答や他の回答のいくつかは、重大な問題であると私が思うことを持っているので、回答を追加せざるを得ません:彼らは読み取り専用のクエリコマンドと変更を加えるコマンドの違いを理解していません。
私はこの回答にクレジットは期待していませんが、受け入れられたが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
です。
読み取り専用以外のコマンドで「ステータス」を選択した人が、英語や他のバージョン管理ツールのコマンドが制限されていたとしか想像できません。
--- + P4V
GUI
GUI p4v
で、reconcileコマンドは、追加、削除、または編集のために開く必要があるローカル変更を検出します。幸い、デフォルトではチェンジリストに追加されません。ただし、変更をコミットしたくない場合は、検査後に調整ウィンドウを閉じるように注意することもできます。
リポジトリとは異なるワークスペース内のファイルをバックアップするツールで以下を使用します(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.
エボラ!
コメントするのに十分な評判ポイントはありませんが、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"
===ジャック
この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
)で実行されていることに注意してください。
Linux、Mac、Windowsのいずれかで動作するものが必要でした。それで、私はそのためのPythonスクリプトを書きました。基本的な考え方は、ファイルを反復処理しp4 fstat
、それぞれに対して実行することです。(もちろん、依存関係とtmpフォルダーは無視します)
あなたはそれをここで見つけることができます:https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9