Comment trouver sans traces de fichiers dans un Perforce arbre?(analogue de l'état svn)

StackOverflow https://stackoverflow.com/questions/9272

  •  08-06-2019
  •  | 
  •  

Question

Quelqu'un a un script ou un alias pour trouver sans traces (vraiment:unadded) des fichiers dans un Perforce arbre?

EDIT:J'ai mis à jour la accepté de répondre sur ce point puisqu'elle ressemble à P4V ajout du support pour cette dans le numéro de janvier 2009 de la libération.

Était-ce utile?

La solution

EDIT: Veuillez utiliser p4 status maintenant.Il n'est pas besoin de sauter à travers des cerceaux plus.Voir @ColonelPanic de l' réponse.

En janvier 2009, la version de P4V, vous pouvez droit-cliquez sur un dossier dans votre espace de travail de l'arborescence et cliquez sur "réconcilier travailler hors connexion..."

Cela va faire un peu de traitement puis ouvrir un split-affichage de l'arborescence des fichiers, qui ne sont pas vérifiées, mais présentent des différences à partir du dépôt de la version, ou pas vérifié du tout.Il peut même y avoir quelques autres catégories, il apporte vers le haut.

Vous pouvez droit-cliquez sur les fichiers de ce point de vue et de les vérifier, de les ajouter, ou même de revenir à eux.

C'est un outil très pratique qui est sauvé mon cul plusieurs fois.

EDIT:ah la question posée sur les scripts, mais je vais laisser cette réponse ici juste au cas où.

Autres conseils

Sur linux, ou si vous avez gnu-outils est installé sur windows:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null

Cela fera apparaître un message d'erreur pour chaque fichier d'inventaire.Si vous voulez capturer la sortie:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile

Sous Unix:

find -type f ! -name '*~' -print0| xargs -0 p4 fstat 2>&1|awk '/no such file/{print $1}'

Cela permettra d'imprimer une liste de fichiers qui ne sont pas ajoutés à votre client ou le dépôt Perforce.J'ai utilisé ! -name '*~' pour exclure des fichiers se terminant par ~.

Ahh, l'un des Perforce classiques :) Oui, il suce vraiment qu'il n'y a TOUJOURS pas de moyen facile pour cette fonction dans les commandes par défaut.

La façon la plus simple est d'exécuter une commande pour trouver tous les fichiers de vos clients racine, puis essayez de les ajouter à la division dépôt.Vous obtiendrez une liste de tous les nouveaux fichiers et les fichiers existants sont ignorés.

E. g dir /s /b /A-D | p4 -x - ajouter

(utilisez 'trouver .-type f -print à partir d'un nix ligne de commande).

Si vous voulez un physique de liste (dans la console ou le fichier) puis vous pouvez transférer les résultats d'une diff (ou ajoutez-en si vous aussi vous voulez dans une liste de modifications).

Si vous êtes en cours d'exécution dans ce P4Win vous pouvez utiliser $r de remplacer le client de la racine de l'espace de travail courant.

Est-il un analogue de svn status ou git status?

Oui, MAIS.

Comme de Perforce version 2012.1, il y a la commande p4 status et dans P4V 'concilier travailler hors connexion'.Cependant, ils sont à la fois très lent.Pour exclure la pertinence des fichiers, vous aurez besoin de rédiger un p4ignore.txt fichier par https://stackoverflow.com/a/13126496/284795

Je me sens poussé à ajouter une réponse, puisque l'on a accepté de répondre, et quelques autres, ont ce que je pense est un problème important:ils ne comprennent pas la différence entre une requête en lecture seule commande, et une commande qui apporte des modifications.

Je n'en attends pas de crédit pour cette réponse, mais j'espère qu'il aidera d'autres personnes à éviter de perdre du temps et faire des erreurs en suivant les acceptée, mais à mon humble avis, la réponse incorrecte.

---+ BRÈVE

Probablement la façon la plus commode de trouver tous les sans traces de fichiers dans un perforce de l'espace de travail est p4 reconcile -na.

-a dit "donnez-moi les fichiers qui ne sont pas dans le référentiel, c'est à direqui devrait être ajouté".

-n dit "ne faites pas de changements" - c'est à direun dry-run.(Bien que les messages peuvent dire "ouvert à ajouter", mentalement, vous devez interpréter cela comme "serait ouvert à ajouter si ce n'est pas n")

Probablement la façon la plus commode de trouver tous les changements effectués en mode hors ligne - pas seulement les fichiers qui doivent être ajoutés, mais aussi les fichiers qui doivent être supprimés, ou qui ont été modifiés sans être ouvert pour l'édition via p4 edit, est p4 reconcile -n.

Plusieurs réponses fournies scripts, impliquant souvent p4 fstat.Alors que je n'ai pas vérifié l'ensemble de ces scripts, j'ai souvent le même type de scripts pour compenser les carences de perforce des commandes telles que p4 reconcile -n - par exemple,souvent je trouve que je veux chemins locaux plutôt que de Perforce depot des chemins ou les chemins de l'espace de travail.

---+ AVERTISSEMENT

p4 status n'est PAS la contrepartie de l'état des commandes sur d'autres systèmes de contrôle de version.

p4 status n'est PAS une requête en lecture seule. p4 status trouve effectivement le même genre de modifications p4 reconcile n', et les ajoute dans le référentiel. p4 status ne semble pas avoir un -n l'exécution de la sec comme option p4 reconcile n'.

Si vous ne p4 status, regarder les fichiers et de penser "Oh, je n'ai pas besoin de ceux-ci", alors vous aurez à p4 revert si vous souhaitez continuer à l'éditer dans le même espace de travail.Ou bien les changements qui p4 status ajouté à votre ensemble de modifications seront vérifiés à la prochaine fois.

Il semble y avoir peu ou pas de raison de l'utiliser p4 status plutôt que de p4 reconcile -n, sauf pour quelques détails de l'espace de travail local vs depot chemin.

Je peux seulement imaginer que celui qui a choisi de "situation" pour une lecture non-seulement la commande avait une maîtrise limitée de la langue anglaise et l'autre version des outils de contrôle.

---+ P4V GUI

Dans l'interface graphique p4v, le rapprochement de commande détecte les changements locaux qui peuvent être ajoutés, supprimés ou ouvert pour modification.Heureusement, il ne peut pas les ajouter à une liste de modifications par défaut;mais vous pouvez toujours être prudent de fermer la fenêtre rapprocher après l'inspection, si vous ne voulez pas valider les modifications.

J'utilise la suite dans mon outil de sauvegarde de tous les fichiers dans l'espace de travail qui diffèrent de celles du référentiel (pour Windows).Il gère quelques rares cas qui, Nécessairement, n'aime pas beaucoup, comme les blancs, les étoiles, les pourcentages, et hashmarks:

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 /A-D la liste de tous les fichiers au ou au-dessous de ce dossier (/S dans "nu" (format/B) à l'exclusion de répertoires (/A-D).L' "sed"les changements de dangereux personnages à leur "%xx"la forme (a la HTML), et le "p4 ont"commande vérifie cette liste ("-x-") sur le serveur de jeter quelque chose sur les fichiers qu'il fait localise dans le référentiel ("1>NUL:").Le résultat est un tas de lignes comme:

Z:\No_Backup\Workspaces\full\depot\Projects\Archerfish\Portal\Main\admin\html\images\nav\navxx_background.gif - file(s) not on client.

Et voilà!

Sinon à partir de P4Win, utiliser les ""Fichiers Locaux pas dans le Dépôt" sur la main gauche panneau d'affichage.

Je n'utilise pas P4V beaucoup, mais je pense que l'équivalent est de sélectionner "Masquer les Locaux de l'espace de travail Fichiers" dans le filtre de liste déroulante de l'espace de travail de l'onglet de la vue.p4 aider fstat

Dans P4V 2015.1 vous trouverez ces options dans le cadre du filtre bouton comme ceci:enter image description here

Rapides " n Sale:Dans p4v cliquez-droit sur le dossier en question et ajouter tous les fichiers en dessous pour une nouvelle liste de modifications.La liste contient maintenant tous les fichiers qui ne sont pas actuellement partie du dépôt.

Les commandes suivantes produire de l'état-comme sortie, mais aucun n'est tout à fait équivalent à svn status ou git status, en fournissant un résumé d'une ligne de l'état de chaque fichier:

  • p4 status
  • p4 opened
  • p4 diff -ds

Je n'ai pas assez de points de réputation pour le commentaire, mais Ross solution aussi répertorie les fichiers qui sont ouverts pour l'ajouter.Vous n'avez probablement pas souhaitez utiliser sa réponse à nettoyer votre espace de travail.

Les utilisations suivantes p4 fstat (merci Mark Harrison) au lieu de p4 have, et répertorie les fichiers qui ne sont pas dans le dépôt et ne pas ouvrir pour ajouter.

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"

===Jac

Méthode rapide, mais peu orthodoxe.Si le code n'est pas ajouter de nouveaux fichiers / changer de vue trop souvent, vous pourriez créer un local git repository de votre caisse.À partir d'un propre, nécessairement, de synchronisation, git init, ajouter et valider tous les fichiers localement.Git status est rapide et afficher les fichiers qui ne sont pas commis précédemment.

L' p4 fstat la commande permet de tester si un fichier existe dans l'espace de travail, de combiner avec d' find pour localiser les fichiers à vérifier comme suit Perl exemple:

// 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;

Ou vous pouvez utiliser p4 reconcile -n -m ...

Si il est ouvert pour les supprimer", puis il a été supprimé de l'espace de travail.Notez que la commande ci-dessus est en cours d'exécution en mode aperçu (-n).

J'ai besoin de quelque chose qui serait à l'œuvre dans Linux, Mac ou Windows.J'ai donc écrit un script Python pour elle.L'idée de base est de parcourir les fichiers et execute p4 fstat sur chacun d'eux.(bien sûr, en ignorant les dépendances et les répertoires tmp)

Vous pouvez le trouver ici: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9

Dans P4V, en vertu de la "Vue" dans le menu, choisissez "Fichiers dans le Dossier", ce qui ouvre un nouvel onglet dans le panneau de droite.À l'extrême droite des onglets il y a une petite icône qui ouvre une fenêtre appelée "les Fichiers dans le Dossier" avec 2 icônes.Sélectionnez l'icône de gauche qui ressemble à un entonnoir et vous verrez plusieurs options.Choisissez "Afficher les éléments sans en Depot" et tous les fichiers dans le dossier s'affichent.Puis clic droit sur le fichier que vous souhaitez ajouter, puis sélectionnez "Marquer pour Ajouter...".Vous pouvez le vérifier c'est là, dans le "en Attente" de l'onglet.Il vous suffit de soumettre comme normale (Ctrl+S).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top