Perforceでファイルを「無視」できますか?


101

PerforceのP4V IDEにある「Reconcile Offline Work ...」機能を使用して、P4デポから切断されている間に作業していたファイルを同期します。「フォルダ差分」を実行する別のウィンドウを起動します。

ソース管理にチェックインしたくないファイルがあります(DLL、コード生成出力などのbinフォルダーで見つかったファイルなど)。これらのファイル/フォルダーを「新規」として表示されないようにフィルター処理する方法はありますか。追加されました。彼らは私が実際に興味を持っているファイルのリストを散らかす傾向があります。P4はSubversionの「ファイルを無視する」機能と同等のものを持っていますか?


私たちがあなたの意味を理解できるように、そして与えられた答えがなぜあなたの望んでいることをしないのかを見ることができるように、CVS出力の例を提供できますか?
グレッグホイットフィールド、

2
Perforceのアイデアのフォーラムでは、Gitスタイルの無視リストの提案に投票できます。p4ideax.com/ideas/15
大佐パニック

「オフライン作業の調整」を押し、「ディポにないローカルファイル」のチェックを外して、「調整」を押します。ファイルを追加しない限り、おそらくこれが最も速い回避策です。
レーン

回答:


59

バージョン2012.1以降、PerforceはP4IGNORE環境変数をサポートしています。私は、ディレクトリ無視することに関するこの質問への私の答えをそれがどのように機能するかの説明で更新しました。その後、私はこの答えに気づきました。


「CLIENT」という名前のクライアント、「foo」という名前のディレクトリ(プロジェクトルートにあります)があり、そのディレクトリツリーのすべての.dllファイルを無視したい場合、ワークスペースビューに次の行を追加して、この:

-// depot / foo / *。dll //CLIENT/foo/*.dll
-// depot / foo /.../*。dll //CLIENT/foo/.../*.dll

1行目はそれらをディレクトリ「foo」から削除し、2行目はそれらをすべてのサブディレクトリから削除します。ここで、「オフライン作業を調整...」すると、すべての.dllファイルが、フォルダーの差分表示の下部にある「除外されたファイル」フォルダーに移動されます。それらはあなたの邪魔にならないでしょうが、本当に必要な場合でもそれらを表示して操作することができます。

別の方法で行うこともできます。これにより、「除外されたファイル」フォルダが1つに減りますが、パスが破損しているため、そこに含まれるファイルを操作することはできません(ただし、ファイルを単に削除したい場合あなたの方法の、それは問題ではありません)。

-// depot / foo ... / *。dll //CLIENT/foo.../*.dll

30
これは機能しますが、作成したすべてのワークスペースにこれらの行を配置する必要があるため、あまり役に立ちません。
dgrant 2009年

6
注:これは、p4vからの通常の調整オフライン作業では機能しません。「除外されたファイル」は「高度な」調整ウィンドウにあるようです...
Catskul

6
除外フィルターはReconcile Offline Workダイアログ内では機能しません。内部で開くと機能しますAdvanced Reconcile...が、99.9%の時間で詳細ダイアログを使用する必要がないため、これは役に立ちません。
ソリン2010

12
@raven:1)(例:)一部のプロジェクトでは、中央の場所に配置するのではなく、各プロジェクトの下にbin / objフォルダーを使用します。(一般的な結論:)すべての中間ファイルが簡単に除外されるワークスペースの場所に配置されるというPERFORCEの想定は、VCSが作成する必要のない制限的な設計です。2)一部のプロジェクトには、ローカルキャッシュや、ユーザーごとに生成されたディレクトリ構造のファイル(例:* .ncb IntelliSenseキャッシュ)が含まれます。これらを共通のポリシーとして除外できないと、オフライン作業の調整機能とフォルダーの差分機能が大幅に損なわれます。
Sam Harwell

6
この特定の問題は私を殺しています。
ウォーレンP

47

はい、でも。

Perforceバージョン2012.1には、Gitに着想を得たp4ignoreと呼ばれる機能が追加されました。ただし、PERFORCEの開発者は、正当な理由なしに動作を変更しました。そのため、この機能はあまり役に立たなくなりました。

Gitはすべての.gitignoreファイルからルールを取得しますが、Perforceは、環境変数でファイル名を指定するまで、どこを見ればよいかわかりませんP4IGNORE。この自由は呪いです。無視するファイルに異なる名前を使用する2つのリポジトリをハックすることはできません。

また、Perforceの無視機能は箱から出して動作しません。自分で簡単に設定できますが、明示的にオプトインしない限り、他の人にはメリットがありません。まだ貢献していない寄稿者が誤って歓迎されないファイル(たとえばbin、ビルドスクリプトによって作成されたフォルダ)をコミットする可能性があります。

Gitの無視機能はすぐに使えるので素晴らしいです。場合は.gitignore、ファイルが(リポジトリに追加されている誰もがこれを行います)、彼らは皆のためのボックスをうまくいきます。誰も誤って自分の秘密鍵を公開することはありません。

面白いことに、PERFORCEのドキュメントでは、「。p4ignore」が無視ルールの例として示されていますが、これは逆です!ルールが役立つ場合は、リポジトリの一部として共有する必要があります。


PERFORCEはこの機能を改善することができます。ファイル名の規則を選択p4ignore.txtします。たとえば、この機能が機能するようにします。P4IGNORE環境変数を削除すると、逆効果になります。ドキュメントを編集して、開発者に役立つルールを共有するように促します。Gitと同様に、ユーザーがホームフォルダー内のファイルに個人用ルールを記述できるようにします。

Perforceの誰かを知っている場合は、この投稿をメールで送信してください。


2
説明をありがとう。P4VSで.p4ignoreを使用してみましたが、無視されることになっていた私のソリューションは無視されませんでした。最初、私は何か間違ったことをしていると思いました。今私はよく知っています。
マイケルS.

1
@ gentlesea、Perforce 2013.1以降、無視機能がグラフィカルアプリでようやく機能します。
大佐パニック

2
ディスカッションで「ボックスアウト機能の作業を無視してください」p4ideax.com/ideas/17856/...
大佐がパニック

1
使用しているワークスペースによって異なる構成変数については、P4CONFIGファイルを使用してみてください。次に、ワークスペース間を移動するときに、P4CONFIGファイルで別のP4IGNORE値を指定できます。
ブライアンペンドルトン

2
PERFORCEは適切なソフトウェアの構築方法を知りません。基本的なことすら得ていません。そのため、PERFORCEに悩まされているすべての人がgitへの移行を夢見ています。
Pavel P

22

これは、Perforce 2013.1以降で機能します。新しいP4IGNOREメカニズムは、リリース2012.1で最初に追加されました。

https://www.perforce.com/blog/new-20121-p4ignore

現在説明されているように、無視するファイルのリストを含むファイル名に環境変数「P4IGNORE」を設定します。

だからあなたはそれをチェックしてあなたがそれがどのように好きかを見ることができます。


1
ファイル名だけでなく、ディレクトリ名を含めることもできます。
ashes999 2015年

前述のとおり、残念ながら、P4IGNOREを設定する必要があります。
Technophile

1
@DerMikeのリンクを修正しました。PerforceがブログのURLを変更したようです。
2018年

7

コピーする必要なしにすべてのワークスペースに適用されるソリューションが必要な場合は、ユーザー(またはシステム管理者)が、p4保護テーブルに次のような行を使用して、これらのファイルタイプの送信を拒否できます。

write user * * -//.../*.suo
write user * * -//.../*.obj
write user * * -//.../*.ccscc

以前にこれを行ったことを覚えていますが、ここでこれをテストするために必要な権限がありません。PERFORCEのSysadminガイドを確認して試してください


3
残念ながら、これにより、調整ビューを無視するのではなく、送信時にエラーが発生します。そのため、特定のファイルをリポジトリーから除外できますが、ユーザーがノイズを見ないようにすることはできません。
ウォーレンP

6

Perforce Streamsでは、バージョン2011.1からファイルを無視することがはるかに簡単になりました。ドキュメントによると、ディレクトリ内の特定の拡張子または特定のパスを無視できます。

から p4 help stream

Ignored: Optional; a list of file or directory names to be ignored in
                 client views. For example:

                     /tmp      # ignores files named 'tmp'
                     /tmp/...  # ignores dirs named 'tmp'
                     .tmp      # ignores file names ending in '.tmp'

                 Lines in the Ignored field may appear in any order.  Ignored
                 names are inherited by child stream client views.

これは基本的に@ravenの答えが指定することを行いますが、そのストリームを使用してすべてのワークスペースに自動的に伝播するため、ストリームを使用する方が簡単です。また、無視タイプを指定したストリームから継承するストリームにも適用されます。

p4 stream //stream_depot/stream_namep4vのストリームビューでストリームを編集するか、ストリームを右クリックします。

そして、@ svecが指摘したように、ワークスペースごとに無視ファイルを指定する機能は間もなく登場し、実際にはP4 2012.1ベータ版に含まれています。


はい、これはチーム全体で「無視」設定を共有するのに役立ちます(私はp4 2013.2を使用しています)。ストリーム対応のデポでのみ機能することに注意してください。(P4IGNORE = .p4ignore環境変数をチーム全体に伝達できる場合、これがおそらく最良のソリューションです。)
yoyo

1
ストリームの[無視]フィールドを使用して、特定のフォルダー、ファイル、またはファイル拡張子を無視できますが、ワイルドカードのサポートは制限されており、フォルダー全体を無視してから特定のファイルまたはサブフォルダーを「無視」する方法はありません。(p4サーバーバージョン2013.2以降)
ヨーヨー2014

3

ウィルの使用の提案は.p4ignore、WebSphere Studio(P4WSAD)プラグインでのみ機能するようです。私はローカルのWindowsボックスで試してみましたが、リストしたファイルやディレクトリ無視されませんでした。

クライアント仕様を変更するというRavenの提案は、Perforceでの正しい方法です。コード/データ/実行可能ファイルと生成された出力ファイルを適切に整理すると、ファイルをチェックインから除外するプロセスがはるかに簡単になります。

より厳格なアプローチとして、特定のファイルまたは特定の拡張子を持つファイルなどが含まれている場合、変更リストの送信を拒否する送信トリガーをいつでも作成できます。


15
「コードの適切な構成...」の文全体に完全に同意しません。問題の事実は、ワークスペースを編集するPERFORCEの慣習に従って、すべてのユーザーが変更を行うことを要求することです。一方、真の.p4ignoreファイルは、一度だけ作成/管理されます。
マイク、

9
ああ、そして言うまでもなく、コードを分岐したいですか?ブランチごとにワークスペースを維持してください。それは楽しそうだ!
マイク

2

歴史的な答え-もはや正解。これが書かれた当時、それは真実でした。

サーバーが無視ルールを作成するために使用するファイルを書き込んでチェックインすることはできません。perforceでは、一般的なglobまたはregexpファイルパターンは無視されます。

他の回答には、グローバルな(サーバーごとではなく)グローバルサーバー構成があります。他の回答は、フォルダーごとにビューの1行にその単一フォルダーで無視する拡張子の数を掛けたい場合、またはWebSphere Studioプラグインでのみこの機能を提供する場合、またはサーバーに機能を提供する場合に役立つ可能性があることを示しています管理者ですが、ユーザーは使用できません。

要するに、私はこの分野でPERFORCEが本当に弱いと感じています。私はEclipseプラグインを使用する人がを使用できることを高く評価していますが.p4ignore、それは素晴らしいことだと思いますが、そうでない人は暗闇の中で去っていきます。

更新:2012年半ばに追加された新しいP4IGNORE機能については、承認済みの回答を参照してください。


1

次のようなBASHスクリプトを使用してオフライン作業を調整するのが最も簡単であることがわかりました。

#!/bin/bash
# reconcile P4 offline work, assuming P4CLIENT is set
if [ -z "$P4CLIENT" ] ; then echo "P4CLIENT is not set"; exit 1; fi
unset PWD # confuses P4 on Windows/CYGWIN

# delete filew that are no longer present
p4 diff -sd ... | p4 -x - delete

# checkout files that have been changed.  
# I don't run this step.  Instead I just checkout everything, 
# then revert unchanged files before committing.
p4 diff -se ... | pr -x - edit

# Add new files, ignoring subversion info, EMACS backups, log files
# Filter output to see only added files and real errors
find . -type f \
 | grep -v -E '(\.svn)|(/build.*/)|(/\.settings)|~|#|(\.log)' \
 | p4 -x - add \
 | grep -v -E '(currently opened for add)|(existing file)|(already opened for edit)'

このPERFORCEナレッジベースの記事からこれを採用しました。


それは7年前のことですが、私は驚くことではありません。誰もがまだPerforceを使用していることに驚いています。
ケビンクライン

...選択なし: '(
DerMike

0

私は.p4ignoreのようなソリューションも探しています(特定のIDEに関連付けられたものではありません)。これまでのところ、私が見つけた最も近いものはp4deltaです。別の間接層を介してではあるが、元のポスターが求めていたとおりのことを行うように思える。

http://p4delta.sourceforge.net

残念ながら、これはファイルの適切なリストを生成するように見えますが、「p4delta --execute」を機能させることができず(「凍結された文字列を変更できません」)、プロジェクトは年に更新されていません。おそらく、他の人がより幸運になるでしょう。


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