Pouvez-vous «ignorer» un fichier dans Perforce?

101

J'utilise parfois la fonction 'Réconcilier le travail hors ligne ...' trouvée dans P4V IDE de Perforce pour synchroniser tous les fichiers sur lesquels j'ai travaillé en étant déconnecté du dépôt P4. Il lance une autre fenêtre qui exécute une 'Folder Diff'.

J'ai des fichiers que je ne veux jamais archiver dans le contrôle de code source (comme ceux trouvés dans le dossier bin comme les DLL, la sortie générée par le code, etc.) Existe-t-il un moyen de filtrer ces fichiers / dossiers pour qu'ils n'apparaissent pas comme «nouveaux» qui pourraient être 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 les fichiers» de Subversion?

Rayon
la source
Pourriez-vous donner un exemple de la sortie CVS afin que nous puissions voir ce que vous voulez dire, et pourquoi les réponses données ne font pas ce que vous voulez?
Greg Whitfield
2
Sur le forum d'idées de Perforce, vous pouvez voter sur une suggestion de listes d' ignorance de
Colonel Panic
Cliquez sur "Réconcilier le travail hors ligne", décochez "Fichiers locaux pas dans le dépôt", appuyez sur "Réconcilier". Tant que vous n'ajoutez pas de fichiers, c'est probablement la solution de contournement la plus rapide.
voie le

Réponses:

59

Depuis la version 2012.1, Perforce prend en charge la P4IGNOREvariable d'environnement. J'ai mis à jour ma réponse à cette question sur l'ignorance des répertoires en expliquant comment cela fonctionne. Puis j'ai remarqué cette réponse, qui est maintenant superflue je suppose.


En supposant que vous ayez un client nommé «CLIENT», un répertoire nommé «foo» (situé à la racine de votre projet), et que vous souhaitiez ignorer tous les fichiers .dll de cette arborescence de répertoires, vous pouvez ajouter les lignes suivantes à la vue de votre espace de travail pour accomplir ce:

- // dépôt / foo / *. dll //CLIENT/foo/*.dll
- // dépôt / 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. Désormais, 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 des différences de dossier. 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 voulez simplement qu'ils sortent de votre chemin, peu importe).

- // depot / foo ... / *. dll //CLIENT/foo.../*.dll
corbeau
la source
30
Bien que cela fonctionne, ce n'est pas très utile car vous devrez placer ces lignes dans chaque espace de travail que vous créez.
dgrant
6
Remarque: cela ne fonctionne pas pour le travail normal de réconciliation hors ligne à partir de p4v. Les «fichiers exclus» ne semblent être que dans la fenêtre de réconciliation «avancée» ...
Catskul
6
Le filtre d'exclusion ne fonctionne pas dans la Reconcile Offline Workboîte de dialogue. Cela fonctionne si vous l'ouvrez à l'intérieur, Advanced Reconcile...mais cela ne sert à rien car dans 99,9% du temps, vous n'avez pas besoin ou ne souhaitez pas utiliser la boîte de dialogue avancée.
sorin
12
@raven: 1) (Exemple :) Certains projets utilisent des dossiers bin / obj sous chaque projet au lieu de les avoir dans un emplacement central. (Conclusion généralisée :) L'hypothèse de Perforce selon laquelle tous les fichiers intermédiaires sont placés dans un emplacement d'espace de travail facilement exclu est une conception inutilement restrictive pour un VCS. 2) Certains projets impliquent un cache local et / ou d'autres fichiers générés par utilisateur dans la structure de répertoires (par exemple, le cache * .ncb IntelliSense). L'incapacité de les exclure en tant que stratégie commune nuit gravement aux fonctionnalités de réconciliation du travail hors ligne et des dossiers de différences.
Sam Harwell
6
Ce problème particulier me tue.
Warren P
47

Oui mais.

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

Alors que Git prend les règles de tous les .gitignorefichiers, Perforce ne sait pas où chercher tant que vous n'avez pas spécifié 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 qui utilisent des noms différents pour leurs fichiers ignorés.

De plus, la fonction d'ignorer de Perforce ne fonctionne pas correctement. Vous pouvez le configurer assez facilement pour vous-même, mais les autres ne bénéficient pas à moins qu'ils ne se déclarent explicitement. Un contributeur qui ne l'a pas fait peut commettre accidentellement des fichiers indésirables (par exemple, un bindossier créé par un script de construction).

La fonctionnalité d'ignorer de Git est excellente car elle fonctionne parfaitement. Si les .gitignorefichiers sont ajoutés au référentiel ( tout le monde le fait ), ils fonctionneront pour tout le monde. Personne ne publiera accidentellement sa clé privée.

De manière amusante, la documentation Perforce montre '.p4ignore' comme exemple de règle d'ignorer, qui est à l'envers! Si les règles sont utiles, elles doivent être partagées dans le cadre du référentiel.


Perforce pourrait encore tirer parti de la fonctionnalité. Choisissez une convention pour les noms de fichiers, par exemple p4ignore.txt, pour que la fonctionnalité fonctionne correctement. Supprimez la P4IGNOREvariable d'environnement, c'est contre-productif. Modifiez les documents pour encourager les développeurs à partager des règles utiles. Permettez aux utilisateurs d'écrire des règles personnelles dans un fichier de leur dossier personnel, comme le fait Git .

Si vous connaissez quelqu'un chez Perforce, veuillez lui envoyer ce message par e-mail.

Colonel Panic
la source
2
Merci pour la clarification. J'ai essayé d'utiliser .p4ignore avec P4VS mais ma solution qui était censée être ignorée n'a pas été ignorée. J'ai d'abord pensé que je faisais quelque chose de mal. Maintenant je sais mieux.
Michael S.
1
@gentlesea, à partir de Perforce 2013.1, la fonction Ignorer fonctionne enfin dans l'application graphique.
Colonel Panic
2
Discussion «Faites en sorte que la fonction Ignorer
Colonel Panic
1
Pour les variables de configuration qui diffèrent en fonction de l'espace de travail que vous utilisez, essayez d'utiliser les fichiers P4CONFIG. Ensuite, vous pouvez faire en sorte que votre fichier P4CONFIG spécifie une valeur P4IGNORE différente lorsque vous vous déplacez d'un espace de travail à un autre.
Bryan Pendleton
2
Perforce ne sait pas comment créer un logiciel approprié, il ne comprend même pas les bases. C'est pourquoi tous ceux qui sont coincés avec forcément rêvent de passer à git.
Pavel P
22

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

https://www.perforce.com/blog/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.

Vous pouvez donc le vérifier pour voir comment vous l'aimez.

svec
la source
1
Vous pouvez également inclure des noms de répertoires, pas seulement des noms de fichiers.
ashes999
Comme mentionné précédemment: malheureusement, vous DEVEZ configurer P4IGNORE.
Technophile
1
J'ai corrigé le lien @DerMike - Je suppose que Perforce a changé les URL de leur blog.
svec
7

Si vous voulez une solution qui s'appliquera à tous les espaces de travail sans avoir besoin d'ê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 le tableau p4 protect:

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

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

Mike Burrows
la source
3
Malheureusement, cela provoque des erreurs lors de la soumission plutôt que d'ignorer la vue de réconciliation. Ainsi, il peut garder certains fichiers hors d'un référentiel, mais il ne peut pas aider vos utilisateurs à ne pas voir le bruit.
Warren P
6

Perforce Streams permet d'ignorer les fichiers beaucoup plus facilement, à 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 @ raven spécifie, mais cela se fait plus facilement avec les flux, car il se propage automatiquement à chaque espace de travail utilisant ce flux. Elle s'applique également à tous les flux héritant du flux dans lequel vous spécifiez les types ignorés.

Vous pouvez modifier le flux via p4 stream //stream_depot/stream_nameou en cliquant avec le bouton droit sur le flux dans la vue de flux de p4v.

Et comme @svec l'a noté, la possibilité de spécifier des fichiers ignorés par espace de travail arrive bientôt, et est en fait dans P4 2012.1 beta.

Chance
la source
Oui, cela fonctionne pour moi de partager les paramètres "ignorer" au sein d'une équipe (j'utilise p4 2013.2). Notez que cela ne fonctionne que dans un dépôt compatible avec les flux. (Si vous pouvez propager la variable d'environnement P4IGNORE = .p4ignore dans votre équipe, c'est probablement la meilleure solution.)
yoyo
1
Notez que le champ Ignoré pour un flux peut être utilisé pour ignorer un dossier, un fichier ou une extension de fichier spécifique, mais la prise en charge des caractères génériques est limitée et il n'y a aucun moyen d'ignorer un dossier entier, puis de «supprimer» des fichiers ou sous-dossiers spécifiques. (À partir de la version du serveur p4 2013.2)
yoyo
3

La suggestion de Will d'utiliser .p4ignoreuniquement semble fonctionner avec le plugin WebSphere Studio (P4WSAD). Je l'ai juste essayé sur ma boîte Windows locale et tous les fichiers et répertoires que j'ai énumérés n'ont pas été ignorés.

La suggestion de Raven de modifier les spécifications de votre client est la bonne manière sous Perforce. Une bonne organisation de votre code / données / exécutables et des fichiers de sortie générés rendra le processus d'exclusion des fichiers de l'archivage beaucoup plus facile.

Comme approche plus draconienne, vous pouvez toujours écrire un déclencheur de soumission qui rejettera la soumission des listes de modifications si elles contiennent un certain fichier ou des fichiers avec une certaine extension, etc.

marque
la source
15
Je ne suis pas du tout d'accord avec l'énoncé "Organisation correcte de votre code ...". Le fait est que, conformément à la convention de modification de l'espace de travail de Perforce, chaque utilisateur doit effectuer la modification. Alors qu'un vrai fichier .p4ignore ne serait créé / géré qu'une seule fois.
Mike
9
Oh, et pour ne pas mentionner, vous aimez brancher votre code? Bonne chance pour maintenir vos espaces de travail pour chaque branche. Cela semble amusant!
Mike
2

RÉPONSE HISTORIQUE - n'est plus correcte. 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 créer des règles d'ignorance; le modèle général de fichier glob ou regexp ignore dans perforce.

D'autres réponses ont des configurations de serveur globales qui sont globales (et non par dossier). Les autres réponses montrent des éléments qui pourraient fonctionner pour vous, si vous voulez une ligne dans votre vue par dossier multiplié par le nombre d'extensions que vous souhaitez ignorer dans ce dossier unique, ou qui fournissent cette fonctionnalité uniquement dans les plug-ins WebSphere Studio, ou fournissent des fonctionnalités pour le serveur administrateurs, mais non disponible pour les utilisateurs.

Bref, je trouve Perforce vraiment faible dans ce domaine. Bien que j'apprécie que ceux qui utilisent le plugin Eclipse puissent l'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.

Warren P
la source
1

J'ai trouvé qu'il était plus facile de réconcilier le travail hors ligne à l'aide d'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)'

J'ai adapté cela à partir de cet article de la base de connaissances Perforce .

Kevin Cline
la source
C'était il y a sept ans, je ne suis pas surpris. Je suis surpris que quiconque utilise toujours Perforce.
kevin cline
... pas par choix: '(
DerMike
0

Je recherche également 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 que cela fera exactement ce que l'affiche originale demandait, mais à travers une autre couche d'indirection.

http://p4delta.sourceforge.net

Malheureusement, bien que cela semble produire la bonne liste de fichiers, je ne peux pas faire fonctionner "p4delta --execute" ("Impossible de modifier une chaîne figée") et le projet n'a pas été mis à jour dans l'année. Peut-être que d'autres auront plus de chance.

Derek Prior
la source
-1

Si vous utilisez le plugin Eclipse Perforce, la documentation du plugin répertorie plusieurs façons d'ignorer les fichiers.

Deepak Sarda
la source
5
dupliquer, et ne répond pas à la question
Warren P