Pouvez-vous «ignorer» un fichier dans Perforce?

J’utilise parfois la fonctionnalité “Réconcilier le travail hors ligne …” trouvée dans l’IDE P4V de Perforce pour synchroniser tous les fichiers sur lesquels je travaillais en étant déconnecté du repository P4. Il lance une autre fenêtre qui exécute un «dossier différentiel».

J’ai des fichiers que je ne veux jamais archiver pour le contrôle de source (comme ceux trouvés dans le dossier bin tels que les DLL, les sorties générées par code, etc.) Y a-t-il un moyen de filtrer ces fichiers / dossiers ajoutée. Ils ont tendance à encombrer la liste des fichiers qui m’intéressent réellement. P4 a-t-il l’équivalent de la fonction «ignorer le fichier» de Subversion?

Depuis la version 2012.1, Perforce prend en charge la variable d’environnement P4IGNORE . J’ai mis à jour ma réponse à cette question sur l’ignorance des répertoires avec une explication de son fonctionnement. Ensuite, j’ai remarqué cette réponse, qui est maintenant superflue, je suppose.


En supposant que vous avez un client nommé “CLIENT”, un répertoire nommé “foo” (situé à la racine de votre projet) et que vous souhaitez ignorer tous les fichiers .dll de cette arborescence, vous pouvez append les lignes suivantes à votre vue d’espace de travail ce:

 - // repository / foo / *. dll //CLIENT/foo/*.dll
 - // repository / foo /.../*. dll //CLIENT/foo/.../*.dll

La première ligne les supprime du répertoire “foo” et la deuxième ligne les supprime de tous les sous-répertoires. Maintenant, lorsque vous “réconciliez le travail hors ligne …”, tous les fichiers .dll seront déplacés dans les dossiers “Fichiers exclus” au bas de l’affichage de la diff des dossiers. Ils seront hors de votre chemin, mais peuvent toujours les voir et les manipuler si vous en avez vraiment besoin.

Vous pouvez également le faire d’une autre manière, ce qui réduira votre dossier “Fichiers exclus” à un seul, mais vous ne pourrez manipuler aucun des fichiers qu’il contient car le chemin sera corrompu (mais si vous le souhaitez) de votre façon, peu importe).

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

Oui mais.

Perforce version 2012.1 a ajouté une fonctionnalité appelée p4ignore , inspirée par Git. Cependant, les développeurs de Perforce ont modifié le comportement sans justification, ce qui rend la fonctionnalité beaucoup moins utile.

Bien que Git prenne des règles pour tous les fichiers .gitignore , Perforce ne sait pas où chercher jusqu’à ce que vous P4IGNORE un nom de fichier dans une variable d’environnement P4IGNORE . Cette liberté est une malédiction. Vous ne pouvez pas pirater deux référentiels utilisant des noms différents pour leurs fichiers ignorés.

En outre, la fonctionnalité d’ignorance de Perforce ne fonctionne pas correctement. Vous pouvez le configurer assez facilement pour vous-même, mais les autres n’en bénéficient pas, sauf s’ils s’y soumettent explicitement. Un consortingbuteur qui n’a pas pu accidentellement commettre des fichiers indésirables (par exemple, un dossier bin créé par un script de compilation).

La fonctionnalité d’ignorer de Git est géniale car elle fonctionne parfaitement. Si les fichiers .gitignore sont ajoutés au référentiel ( tout le monde le fait ), ils travailleront pour tout le monde. Personne ne publiera accidentellement sa clé privée.

De manière amusante, les documents Perforce affichent «.p4ignore» comme exemple: ignorer la règle, qui est inversée! Si les règles sont utiles, elles doivent être partagées avec le référentiel.


Perforce pourrait encore améliorer cette fonctionnalité. Choisissez une convention pour les noms de fichiers, par exemple p4ignore.txt , afin que la fonctionnalité fonctionne bien. Supprimez la variable d’environnement P4IGNORE , c’est contre-productif. Modifiez les documents pour encourager les développeurs à partager des règles utiles. Laissez les utilisateurs écrire des règles personnelles dans un fichier dans leur dossier personnel, comme le fait Git .

Si vous connaissez quelqu’un chez Perforce, veuillez lui envoyer un courrier électronique.

Cela fonctionne à partir de Perforce 2013.1, le nouveau mécanisme P4IGNORE a été ajouté pour la première fois en 2012.1, décrit sur le blog Perforce ici:

http://www.perforce.com/blog/120130/new-20121-p4ignore

Comme il est actuellement décrit, vous définissez une variable d’environnement “P4IGNORE” sur un nom de fichier qui contient une liste des fichiers à ignorer.

Donc, vous pouvez le vérifier pour voir comment vous l’aimez.

Si vous voulez une solution qui s’applique à tous les espaces de travail sans avoir à être copiée, vous (ou votre administrateur système) pouvez refuser la soumission de ces types de fichiers en utilisant des lignes comme ci-dessous dans la table p4 protect:

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

Je me souviens de l’avoir fait auparavant, mais je n’ai pas les permissions nécessaires pour tester cela ici. Consultez le guide Sysadmin de Perforce et essayez-le

Perforce Streams facilite grandement l’ignorance des fichiers, à partir de la version 2011.1. Selon la documentation, vous pouvez ignorer certaines extensions ou certains chemins de votre répertoire.

De 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. 

Cela fait essentiellement ce que la réponse de @doren spécifie, mais est plus facile avec les stream, car elle se propage automatiquement à chaque espace de travail utilisant ce stream. Elle s’applique également à tous les stream héritant du stream dans lequel vous spécifiez les types ignore.

Vous pouvez éditer le stream via le stream p4 stream //stream_depot/stream_name ou en cliquant avec le bouton droit sur le stream dans la vue du stream de p4v.

Et comme @svec l’a noté, la possibilité de spécifier des fichiers ignorés par espace de travail est à venir, et est en fait dans la version bêta P4 2012.1.

La suggestion de Will d’utiliser .p4ignore ne semble fonctionner qu’avec le plugin WebSphere Studio (P4WSAD). Je viens de l’essayer sur ma fenêtre Windows locale et tous les fichiers et répertoires que j’ai répertoriés ne sont pas ignorés.

La suggestion de Raven de modifier les spécifications de votre client est la bonne manière sous Perforce. Une organisation appropriée de vos codes / données / fichiers exécutables et fichiers de sortie générés facilitera grandement le processus d’exclusion des fichiers.

En tant qu’approche plus draconienne, vous pouvez toujours écrire un déclencheur de soumission qui rejettera la soumission des listes de modifications si elles contiennent un ou plusieurs fichiers avec une certaine extension, etc.

RÉPONSE HISTORIQUE – n’est plus correct. Au moment où cela a été écrit à l’origine c’était vrai;

Vous ne pouvez pas écrire et archiver un fichier que le serveur utilisera pour ignorer les règles; glob glob ou regexp modèle de fichier ignorer dans perforce.

Les autres réponses ont des configurations de serveur globales globales (et non par dossier). Les autres réponses affichent des éléments susceptibles de vous convenir, si vous souhaitez une seule ligne dans votre vue par dossier multipliée par le nombre d’extensions que vous souhaitez ignorer dans ce seul dossier ou qui fournissent uniquement cette fonctionnalité dans les plug-ins WebSphere Studio. administrateurs, mais non disponible pour les utilisateurs.

En bref, je trouve Perforce vraiment faible dans ce domaine. Bien que j’apprécie que ceux qui utilisent le plugin Eclipse puissent utiliser .p4ignore , et je pense que c’est génial, cela laisse ceux d’entre nous qui ne le font pas, dans le noir.

MISE À JOUR: Voir la réponse acceptée pour la nouvelle fonctionnalité P4IGNORE ajoutée mi-2012.

J’ai trouvé plus facile de réconcilier le travail hors ligne en utilisant un script BASH comme celui-ci:

 #!/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)' 

Je l’ai adapté à partir de cet article de la base de connaissances Perforce .

Je cherche aussi une solution de type .p4ignore (et non une solution liée à un IDE particulier). Jusqu’à présent, la chose la plus proche que j’ai trouvée est p4delta. On dirait qu’il fera exactement ce que demandait l’affiche originale, bien que par une autre couche d’indirection.

http://p4delta.sourceforge.net

Malheureusement, bien que cela semble produire la liste appropriée des fichiers, je ne peux pas faire fonctionner “p4delta –execute” (“Impossible de modifier une chaîne gelée”) et le projet n’a pas été mis à jour au cours de l’année. Peut-être que d’autres auront plus de chance.

Si vous utilisez le plug-in Eclipse Perforce, la documentation du plug-in répertorie plusieurs façons d’ignorer les fichiers.