50 votes

Peut-on "ignorer" un répertoire dans P4V ?

Nous utilisons Visual Studio, qui génère beaucoup de bin et obj les répertoires. Lorsque j'utilise P4V Si vous utilisez la fonction "Réconcilier le travail hors ligne", ces fichiers apparaissent dans la liste des "fichiers locaux qui ne sont pas dans le dépôt".

Je voudrais les exclure. J'ai trouvé cette question mais il s'agit de fichiers, et lorsque j'essaie ce qu'il suggère (ajouter ce qui suit à ma vue de l'espace de travail), ça ne marche pas :

//depot/Foo/... //Client/Foo/...
-//depot/Foo/.../*.user //Client/Foo/.../*.user
-//depot/Foo/.../bin/... //Client/Foo/.../bin/...
-//depot/Foo/.../obj/... //Client/Foo/.../obj/...

En fait, cela ne semble pas fonctionner pour les fichiers non plus : les fichiers foo.csproj.user sont toujours affichés dans la liste.

Puis-je exclure des répertoires de P4V ? Si oui, comment ? Qu'est-ce que je fais de mal ?

75voto

raven Points 9396

À partir de la version 2012.1, Perforce prend en charge l'option P4IGNORE variable d'environnement. Cela vous permet de spécifier les fichiers et les répertoires à ignorer lors de l'utilisation des commandes qui recherchent ou ajoutent de nouveaux fichiers ( p4 add , p4 status et p4 reconcile ).

Pour utiliser un fichier d'ignorance, créez un fichier dans la racine de votre espace de travail et donnez-lui un nom significatif. La convention semble être quelque chose comme .ignorer ou .p4ignore mais n'importe quoi fera l'affaire (j'ai utilisé p4ignore.txt afin que je puisse l'éditer d'un simple double-clic). Puis remplissez-le avec vos règles d'ignorance. La règle suivante ignorera les débris indésirables générés par Visual Studio :

\# directories
bin
obj

# files
\*.suo
\*.user

Après avoir créé ce fichier, définissez l'option P4IGNORE pour le faire pointer. À la ligne de commande, tapez quelque chose du genre de ceci :

p4 set P4IGNORE=C:\somepath\p4ignore.txt

Veillez à utiliser un chemin absolu ! Le site Documentation Perforce ne le spécifie pas et ma première tentative n'a pas fonctionné (sous Windows en tout cas) parce que je n'avais pas spécifié un chemin absolu.

Après avoir fait cela, toute tentative d'ajouter des fichiers ou des répertoires qui sont dans la liste des ignorés sera rejetée et vous verrez un avertissement tel que celui-ci (qui vous donne la possibilité de le supprimer) :

P4V 'ignored' files message


Si vous utilisez une version du serveur Perforce antérieure à 2012.1, vous pouvez toujours le faire dans votre spécification client. La syntaxe de vos règles d'exclusion est juste un peu fausse. Ce que vous voulez est ceci :

\-//depot/Foo.../\*.user //Client/Foo.../\*.user
-//depot/Foo...bin/... //Client/Foo...bin/...
-//depot/Foo...obj/... //Client/Foo...obj/...

Notez les barres obliques manquantes après "Foo" et avant "bin" et "obj".

0 votes

Cela ne fonctionne pas pour les répertoires ; je vois toujours (par exemple) path \to\bin\Debug\Foo.pdb. Cela fonctionne pour les fichiers foo.csproj.user, cependant (ce qui ne semblait pas être le cas hier) Odd.

0 votes

Mais cela semble fonctionner dans la boîte de réconciliation avancée. Que se passe-t-il ici ?

3 votes

Cela fonctionne pour moi avec P4V 2010.2.

8voto

Thariama Points 26420

Réponse actualisée : Cela a été quelque peu délicat dans le passé, car il n'y avait pas de moyen intégré d'exclure un répertoire d'une commande Perforce. Depuis 2012, cela a changé. Vous pouvez consulter un bon article de perforce pour ce problème .

À partir de 2012.1, le P4IGNORE peut être définie pour désigner un fichier à utiliser pour exclure des fichiers de Perforce. Le serveur Perforce (p4d) et le client (p4, P4V) doivent tous deux avoir la version 2012.1 ou supérieure. P4IGNORE Le but de l'outil est d'ignorer les fichiers lors de l'ajout de nouveaux fichiers au dépôt et de la réconciliation des espaces de travail. Comme des fonctionnalités comparables dans d'autres systèmes de contrôle de version, P4IGNORE ne peut pas être utilisé pour ignorer des fichiers déjà sous le contrôle du dépôt.

P4Eclipse gère .p4ignore selon ses propres termes. (voir le manuel concernant ce point ici )

Utilisation de vues client pour exclure des fichiers et des répertoires :

La méthode traditionnelle pour exclure des fichiers et des répertoires dans Perforce consiste à utiliser des mappages de clients d'exclusion. Consultez la référence de la commande Views pour une documentation complète. Exemple de vue :

Voir :

//depot/... //test_ws/depot/...
-//depot/dir/etc/... //test_ws/depot/dir/etc/...

Cette vue empêchera les fichiers dans dir/etc d'être ajoutés au dépôt. Si vous essayez d'exclure le répertoire des requêtes en lecture seule, utilisez la syntaxe client ou relative.

$ p4 files //depot/dir/etc/...
//depot/dir/etc/foo#1 - add change 1186 (text)
//depot/dir/etc/bar#1 - add change 1186 (text) 

$ p4 files //test_ws/dir/etc/...
//test_ws/test_ignore/ignoredir/... - file(s) not in client view. 

$ cd dir/etc
$ p4 files ...
... - file(s) not in client view.

Vous pouvez également utiliser des commandes shell pour filtrer votre sortie comme vous le souhaitez.

p4 files //depot/dir/... |
    awk -F# '{print $1}' |
    grep -v "//depot/dir/etc/" |
    p4 -x - fstat

qui lance p4 fstat sur tous les fichiers sous " //depot/dir/ ", sauf pour les fichiers sous " //depot/dir/etc/ ". Cette exclusion de répertoire est réalisée en listant tous les fichiers, puis en utilisant grep pour supprimer les fichiers qui se trouvent sous le répertoire à exclure. La barre oblique de fin de ligne dans " //depot/dir/etc/ "est nécessaire pour éviter de faire correspondre des répertoires sous " //depot/dir/ "qui commencent par "etc" (par exemple, " //depot/dir/etc2009 ").

Note :

La commande awk suppose qu'aucun nom de fichier ne contient le caractère "#". La commande grep peut également lire ses motifs depuis un fichier, ce qui est utile si vous devez exclure plusieurs répertoires. Nous utilisons les drapeaux '-x -' avec la commande p4 pour utiliser l'entrée comme argument de la commande correspondante ; voir les options globales de la ligne de commande Perforce pour plus d'informations.

2 votes

Gah. C'est hideux, mais ça pourrait être la meilleure façon de faire ce que je veux. J'essaierai plus tard.

69 votes

Pourquoi les entreprises paient-elles pour cela ?

7 votes

Cette réponse n'est plus correcte. Voir cette réponse .

7voto

Clint StLaurent Points 321

Il existe un moyen de le faire directement dans Perforce :

  • Menu de connexion
  • Modifier l'espace de travail actuel...

Naviguez dans l'arborescence du projet. Cliquez avec le bouton droit de la souris sur le fichier ou le dossier. Choisissez d'inclure ou d'exclure le fichier, le dossier, l'arbre entier.

1 votes

Cela ne fonctionne que si votre espace de travail est compatible avec l'arborescence. Celui en question ne l'était pas.

3voto

funroll Points 4014

Cela fonctionne très bien pour moi :

//depot/... //my_workspace_name/...
-//depot/.../.git/... //my_workspace_name/.../.git/...
-//depot/.../xcuserdata/... //my_workspace_name/.../xcuserdata/...
-//depot/.../xcschemes/... //my_workspace_name/.../xcschemes/...
-//depot/.../xcdebugger/... //my_workspace_name/.../xcdebugger/...

0 votes

Notez que je cartographie l'ensemble du dépôt. (Bien que je ne synchronise que ce dont j'ai besoin.) Testé avec P4V 2011.1 sur OS X 10.7.4

-1voto

Chance Points 1389

J'irais de l'avant avec le travail de réconciliation hors ligne et je ferais tout sauf la soumission. Avant la soumission, faites ce qui suit :

p4 revert //Client/Foo/.../*.user

p4 revert //Client/Foo/.../bin/...

p4 revert //Client/Foo/.../obj/...

Ce n'est pas automatisé, mais c'est le mieux que je puisse faire pour l'instant.

1 votes

C'est pourquoi j'aimerais utiliser ignore, mais oui, je rétablis manuellement des choses (ou je pourrais finir par écrire un shellscript pour cela), et ceci est une blague.

0 votes

@SzabolcsKurdi, Perforce dispose maintenant d'un moyen d'ignorer les répertoires et les fichiers, à la fois via la variable P4IGNORE, et via le champ Ignored dans la spécification du flux. Je n'ai pas le temps de vous répondre pour l'instant.

0 votes

J'ai essayé d'utiliser P4Ignore mais cela ne fonctionne pas du tout dans le gui (et je le trouve assez lourd, comparé à gitignore par exemple) ; c'est peut-être moi, mais je n'ai pas trouvé de solution appropriée. Je serais heureux si vous pouviez me dire comment vous avez fait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X